You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言快餐店收银代码收据输出异常求助

C语言快餐店收银代码收据输出问题修复

问题现象

  • 仅选择披萨(1)或烤肉串(2)时,收据会同时显示两种食物
  • 选择汉堡(3)时,收据显示的是烤肉串
  • 饮料部分会出现类似“sprite 102”的异常内容

错误根源

  1. 未初始化计数变量:pizza、Kebab、hamburger、cola、fanta、sprite这些计数变量声明后未初始化为0,C语言局部变量默认是随机垃圾值,导致判断>0时逻辑混乱,甚至显示异常数值。
  2. 收据打印逻辑错误:食物和饮料的打印使用了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;
}

修复说明

  1. 初始化计数变量:将所有食物、饮料计数变量初始化为0,彻底解决随机垃圾值导致的异常显示和逻辑错误。
  2. 调整打印逻辑:把食物、饮料打印部分的else if改为独立if语句,确保所有选中的商品都会被打印,不会互相覆盖。
  3. 修正细节问题:修正了堂食/外带的金额提示错误,补充了总价计算和打印功能,让收据内容更完整。

内容的提问来源于stack exchange,提问作者Jees_Offer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 02:50:40