2015-09-19 6 views
-1

Я новичок в C..so, пожалуйста, несите меня .. Я хочу вызвать функцию printReceipt (char, char, char) в функции calculatePrice (char), но он сказал, что есть ошибка для неверного преобразования из char в char при вызове функции для printReceipt. Кто-нибудь может мне помочь, пожалуйста!Неверное преобразование из 'char *' в 'char [-fpermissive]

double calculatePrice(char cust)  //calculate total price for each customer and return the value 
{ 
    char code[5], size, top; 
    double discount, drPrice, topPrice, price; 


    printf("\n\t\t\t\tEnter the order's code :"); 
    scanf("%s", code); 

    printf("\n\t\t\t\tEnter size of cup : "); 
    scanf(" %c", &size); 

    printf("\n\t\t\t\tEnter topping : "); 
    scanf(" %c", &top); 



    if((strcmp(code, "T1")==0) || (strcmp(code, "T2")==0) || (strcmp(code, "T3")==0) ||(strcmp(code, "T4")==0) || (strcmp(code, "T5")==0)) //drinks code 
    { 
     if(size == 'R') 
      drPrice = 4.90; 
     else if(size == 'L') 
      drPrice = 5.90; 
    } 

    if((strcmp(code, "CH1")==0) || (strcmp(code, "CH2")==0) || (strcmp(code, "CH3")==0) || (strcmp(code, "CH4")==0) || (strcmp(code, "CH5")==0)) //drinks code 
    { 
     if(size == 'R') 
      drPrice = 6.90; 
     else if(size == 'L') 
      drPrice = 7.90; 
    } 

    if((strcmp(code, "C2")==0) || (strcmp(code, "C3")==0) || (strcmp(code, "C5")==0)) //drinks code 
     drPrice = 5.90;  

    if((strcmp(code, "S1")==0) || (strcmp(code, "S2")==0) || (strcmp(code, "S5")==0) || (strcmp(code, "S7")==0) || (strcmp(code, "S9")==0)) //drinks code 
     drPrice = 6.90; 

    if((strcmp(code, "S3")==0) || (strcmp(code, "S4")==0) || (strcmp(code, "S6")==0) || (strcmp(code, "S8")==0) || (strcmp(code, "S10")==0) || (strcmp(code, "S11")==0)) //drinks code 
     drPrice = 5.90; 

    if(strcmp(code, "C1") == 0)  //drinks code 
     drPrice = 3.90; 

    if(strcmp(code, "C4") == 0)  //drinks code 
     drPrice = 4.90; 

    if(top == 'B' || top == 'G' || top == 'J' || top == 'P' || top == 'A')  //topping type 
     topPrice = 0.60; 

    if(top == 'X')  //if no topping is selected 
     topPrice = 0.00; 

    if(cust == 'M')  //customer type 
     price = 0.8 * (topPrice + drPrice);   

    else if(cust == 'S') //customer type 
     price = 0.85 * (topPrice + drPrice);  

    else if(cust == 'R') //customer type 
     price = topPrice + drPrice; 

    printReceipt(code, size, top); 

    return price; //return value 
} 


void printReceipt(char code, char size, char top) 
{ 
    FILE *f = fopen("receipt.txt", "w"); 

    if(f == NULL) 
    { 
     printf("Error opening file!\n"); 
     exit(1); 
    } 

    fprintf(f, "bla bla bla"); 


    fclose(f); 
} 
+2

код голец [5] не ** символ ** как требуется функцией – amdixon

+1

Ну, 'code' не является' char', это массив символов, который будет передан функции как указатель на его первый элемент, т. е. как символ "char *". На данный момент неясно, как вы используете 'code' в' printReceipt', но я думаю, вы хотите иметь 'char * code' или, может быть, даже' const char * code' в качестве аргумента для этой функции. –

+1

Примечание: с таким маленьким буфером символов для 'code' вы должны защищать от переполнения буфера, указав максимальное количество символов при сканировании:' scanf («% 4s», code) '. –

ответ

1
void printReceipt(char code, char size, char top) 

Эта функция ожидать char в качестве первого аргумента и при вызове вы передаете char array - тип

printReceipt(code, size, top); 
       ^code is char array (declared as char code[5]) 

Либо изменение первого аргумента char * в функции printReceipt или передать один символ к нему ,

Внесите изменения в соответствии с вашими потребностями.

Для безопасности напиши это - scanf("%s", code); как это -

scanf("%4s", code); 
+0

спасибо @ameyCU !! xDD –

1

изменить это

void printReceipt(char code, char size, char top) 

в

void printReceipt(char *code, char size, char top) 
+0

спасибо @kkk .. он работает! :) –

Смежные вопросы