C语言快餐店收银代码收据输出异常求助
C语言快餐店收银代码收据输出问题修复
问题现象
- 仅选择披萨(1)或烤肉串(2)时,收据会同时显示两种食物
- 选择汉堡(3)时,收据显示的是烤肉串
- 饮料部分会出现类似“sprite 102”的异常内容
错误根源
- 未初始化计数变量:
pizza、Kebab、hamburger、cola、fanta、sprite这些计数变量声明后未初始化为0,C语言局部变量默认是随机垃圾值,导致判断>0时逻辑混乱,甚至显示异常数值。 - 收据打印逻辑错误:食物和饮料的打印使用了
else if结构,这意味着只会打印第一个满足条件的项,而非所有选中的项。比如选披萨时,Kebab的随机值可能大于0,就会错误同时显示;选汉堡时,前面的随机值触发条件,导致显示烤肉串而非汉堡。
修复后的代码
#include <stdio.h> #include <stdlib.h> #include <conio.h> int main() { // 所有计数变量初始化为0,避免随机垃圾值干扰 int pizza = 0; int Kebab = 0; int hamburger = 0; int cola = 0; int fanta = 0; int sprite = 0; int mat; int drikke; char spise; char mer = 'y'; float sum = 0; while(mer == 'y') { printf("\n\t Welcome to Jenas Fast food\n"); printf("\n\nwhat do you want to eat?\n"); printf("\nPizza: (130kr) press 1 \t\t Kebab: (75kr) press 2 \t\t Hamburger: (55kr) press 3 \t No Food: press 0\n\n"); scanf("%d", &mat); if(mat == 1) { printf("\n\t\t\t You chose Pizza (130kr)\n"); pizza = pizza + 1; } else if(mat == 2) { printf("\n\t\t\t You chose Kebab (75kr)\n"); Kebab = Kebab + 1; } else if(mat == 3) { printf("\n\t\t\t You chose Hamburger (55kr)\n"); hamburger = hamburger + 1; } else if(mat == 0) { printf("\n\t\t\t You did not choose any food\n"); } printf("\nDo you want a drink?\n\n"); printf("Cola: (22,50kr) press 1 \t fanta: (22,50kr) press 2 \t sprite: (21,50kr) press 3\tNo drink: press 0\n\n"); scanf("%d", &drikke); if(drikke == 1) { printf("\n\t\t\t You chose Cola (22,50kr)\n"); cola = cola + 1; } else if(drikke == 2) { printf("\n\t\t\t You chose Fanta (22,50kr)\n"); fanta = fanta + 1; } else if(drikke == 3) { printf("\n\t\t\t You chose sprite (21,50kr)\n"); sprite = sprite + 1; } else if(drikke == 0) { printf("\n\t\t\t You did not choose any Drinks\n"); } printf("\n\nDo you want anything more?\tpress y for yes and n for no\n\n"); scanf(" %c", &mer); } printf("\n\nDo you want to eat inside (+0kr) or outside (+5kr)?\t press i for inside and o for outside\n\n"); scanf(" %c", &spise); if(spise == 'i') { printf("\n\n\tYou are going to eat Inside(+0Kr)"); } else if(spise == 'o') { printf("\n\n\tYou are going to eat Outside(+5Kr)"); } system("cls"); printf("\t\tRECEIPT\n"); printf("__________________________________________\n"); printf("\n\t\tFOOD\n\n"); // 改为独立if语句,打印所有选中的食物 if(pizza > 0) { printf(" Pizza\t\t %d\n", pizza); } if(Kebab > 0) { printf(" Kebab\t\t %d\n", Kebab); } if(hamburger > 0) { printf(" Hamburger\t %d\n", hamburger); } printf("\n\n__________________________________________\n"); printf("\n\t\tDRINKS\n\n"); // 改为独立if语句,打印所有选中的饮料 if(cola > 0) { printf(" Cola\t\t %d\n", cola); } if(fanta > 0) { printf(" Fanta\t\t %d\n", fanta); } if(sprite > 0) { printf(" Sprite\t\t %d\n", sprite); } // 补充总价计算与打印 sum = pizza * 130 + Kebab *75 + hamburger *55 + cola*22.5 + fanta*22.5 + sprite*21.5; if(spise == 'o') sum +=5; printf("\n\n__________________________________________\n"); printf(" Total:\t\t %.2f kr\n", sum); return 0; }
修复说明
- 初始化计数变量:将所有食物、饮料计数变量初始化为0,彻底解决随机垃圾值导致的异常显示和逻辑错误。
- 调整打印逻辑:把食物、饮料打印部分的
else if改为独立if语句,确保所有选中的商品都会被打印,不会互相覆盖。 - 修正细节问题:修正了堂食/外带的金额提示错误,补充了总价计算和打印功能,让收据内容更完整。
内容的提问来源于stack exchange,提问作者Jees_Offer
相关产品推荐
相关产品推荐

