C 项目 (POS) - 显示付款更改错误



我在下面有一个C项目。它有点像POS。我的问题是显示客户的付款更改。几乎完成了系统,只是更改显示部分。我在运行此代码时遇到运行时错误。希望你能帮我解决这个问题。我还有文档要完成。提前致谢:)

int Purchase(){
addon=0;
strcpy(addonC,"00");
system("cls");
printf("t############################################n");
printf("t#                                          #n");
printf("t#                BEVERAGES                 #n");
printf("t#                            Reg   Large   #n");
printf("t#   [a] Banana MilkTea     - 130    145    #n");
printf("t#   [b] Nagoya             - 160    175    #n");
printf("t#   [c] Hazelnut Smoothie  - 150    165    #n");
printf("t#   [d] Vanilla Matcha     - 130    145    #n");
printf("t#                                          #n");
printf("t############################################n");
printf("nntChoice: ");
fflush(stdin);
scanf("%c",&choice);
printf("tBeverage: ");
switch(choice){
    case 'a':
        printf("tBanana MilkTea");
        strcpy(Beverage,Item1);
        cost=130;
        break;
    case 'b':
        printf("tNagoya");
        strcpy(Beverage,Item2);
        cost=160;
        break;
    case 'c':
        printf("Hazelnut Smoothie");
        strcpy(Beverage,Item3);
        cost=150;
        break;
    case 'd':
        printf("Vanila Matcha");
        strcpy(Beverage,Item4);
        cost=130;
        break;
    default:
        printf("Invalid Choice. Please try again.");
        Purchase(tAmt1);
        break;
}
do{
    temp=0;
    printf("nt----------------------------n");
    printf("t[1]Regular,[2]LargentChoose size: ");
    fflush(stdin); scanf("%i",&size);
    switch(size){
        case 1:
            printf("ntItem: Regular %s",Beverage);
            break;
        case 2:
            printf("ntItem: Large %s",Beverage);
            break;
        default:
            printf("tInvalid size. Please try again");
            break;
    }
    if(size==1 || size==2)
        break;
}while(size!=1 || size !=2);
if(size==2){
    cost=cost+15;
    printf("ntCost: %i",cost);
}
else{
    printf("ntCost: %i",cost);
}
printf("ntAddons? [Y]Yes/[N]No: ");
fflush(stdin);
scanf("%c",&choice);
if(choice=='y' || choice=='Y'){
    do{
    //  system("cls");
            printf("nt############################n");
            printf("t#                          #n");
            printf("t#        ADD-ONS           #n");
            printf("t#   [a] Crystals      30   #n");
            printf("t#   [b] Small Pearls  25   #n");
            printf("t#   [c] Big Pearls    30   #n");
            printf("t#   [d] Taro          40   #n");
            printf("t#                          #n");
            printf("t############################n");
            printf("tEnter your add-on: ");
            fflush(stdin);
            scanf("%c", &add);
        switch(add){
            case 'a':
                addon=30;
                printf("tAdd Crystals");
                strcpy(addonC,"Crystals");
                break;
            case 'b':
                addon=25;
                printf("tAdd Small_Pearls");
                strcpy(addonC,"Small_Pearls");
                break;
            case 'c':
                addon=30;
                printf("tAdd Big_Pearls");
                strcpy(addonC,"Big_Pearls");
                break;
            case 'd':
                addon=40;
                printf("tAdd Taro");
                strcpy(addonC,"Taro");
                break;
            default:
                system("cls");
                printf("tInvalid addon. nPlease try again.");
                break;
        }
        if(add=='a' || add=='b' || add=='c' || add=='d')
            break;
    }while(add!='a' || add!='b' || add!='c' || add!='d');
}
else{
}
FILE *f_sales;
f_sales=fopen("sales.txt","a+");
fprintf(f_sales,"%i %s %i %s %i %in",date,Beverage,size,addonC,cost,addon);
subTotal=cost+addon;
printf("ntSubtotal: %i",subTotal);
tAmt1+=subTotal;
printf("nntTOTAL AMOUNT: %i",tAmt1);
printf("ntpress any key to continue...");
getch();
fclose(f_sales);
do{
    printf("nnt*****************nntAnother purchase? [Y]Yes/[N]No: ");    
    fflush(stdin);
    scanf("%c",&choice);
    if(choice=='y' || choice=='Y'){
        Purchase();
    }
    else if(choice=='n' || choice=='N'){
        printf("tCustomer's Payment: ");
        fflush(stdin);
        scanf("%i",&cPay);
    //  Total=tAmt1;
        printf("tCustomer's Change: %i",cPay-tAmt1);
        printf("tGo back to main menu? [Y]Yes | [N]No: ");
        fflush(stdin);
        scanf("%c",&choice);
        if(choice=='y' || choice=='Y')
            SaleMenu();
        else{
            printf("tHave a good day!n");
            getch();
            printf("tProgram will now Exit...");
        }
    }
    else{
        printf("ntInvalid choice. Try again.");
        system("cls");
    }
}while(choice!='n' || choice=='N' || choice=='y' || choice=='Y');
//return tAmt1;

}

错误位于

  scanf("%i",cPay);

最好给出指针,就像您在其他任何地方所做的那样......

  scanf("%i",&cPay);

我还建议使用 %d 而不是 %i .但是,如果您的一位客户只知道十六进制数字,请保留%i

再见

弗朗西斯

最新更新