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

C语言编程:点餐程序订单详情输出显示异常问题求助

C语言点餐程序订单输出异常修复方案

核心问题梳理

  • 变量类型不匹配:你将Meal、Drinks定义为单字符char类型,但后续给它们赋值字符串字面量,字符类型无法存储字符串内容,属于严重的类型错误,会触发未定义行为
  • 输入缓冲区残留换行:第一次调用scanf("%c")读取餐品选项后,用户按下的回车换行符会残留在输入缓冲区,第二次读取饮品选项时会直接读到空的换行符,导致饮品选项读取失败
  • 输入输出格式符错误:读取饮品的scanf写了2个%c格式符却只传了1个变量地址,参数数量不匹配;最终输出时用单字符格式符%c打印字符串,自然无法得到正确结果

修复后完整代码

#include <stdio.h>
#include <stdlib.h>

int main(void) {
    // 定义为const char*类型存储餐品、饮品的字符串名称
    const char *Meal, *Drinks;
    char meal_opt, drink_opt;
    int Quantity;

    printf("Meal: ");
    fflush(stdout);
    // 格式符前加空格,自动跳过缓冲区残留的空白字符(包括换行、空格)
    scanf(" %c", &meal_opt);

    switch (meal_opt) {
        case 'A':
            Meal = "Chicken & Spaghetti";
            break;
        case 'B':
            Meal = "Hamburger & Fries";
            break;
        case 'C':
            Meal = "Cheese Burger";
            break;
        case 'D':
            Meal = "Pizza";
            break;
        default:
            Meal = "Invalid Meal";
    }

    printf("Drinks: ");
    fflush(stdout);
    scanf(" %c", &drink_opt);

    switch (drink_opt) {
        case 'S':
            Drinks = "Small Drinks";
            break;
        case 'M':
            Drinks = "Medium Drinks";
            break;
        case 'L':
            Drinks = "Large Drinks";
            break;
        default:
            Drinks = "Invalid Drinks";
    }

    printf("Quantity: ");
    fflush(stdout);
    scanf("%i", &Quantity);

    // 用%s格式符输出字符串
    printf("Order Details: %s and %s, Quantity: %d\n", Meal, Drinks, Quantity);
    fflush(stdout);
    return 0;
}

运行验证

输入示例:

Meal: B
Drinks: S
Quantity: 2

输出结果:

Order Details: Hamburger & Fries and Small Drinks, Quantity: 2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 01:54:08