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
相关产品推荐
相关产品推荐

