C语言购物车总价统计程序无输出问题排查求助
解决C语言购物车总价统计程序的死循环与输入异常问题
问题根源
你的程序并非真正陷入死循环,而是输入缓冲区残留的换行符干扰了字符读取逻辑:
- 当用
scanf("%f", &price)输入价格后,你按下的回车键会在输入缓冲区留下一个\n(换行符)。 - 后续的
scanf("%c", &choice)会直接读取这个换行符,而非你手动输入的'y'或'n'。 - 由于
choice的值是换行符(既不是'y'也不是'n'),循环会持续执行,且Continue?:提示后不会等待你输入,直接进入下一轮的Enter price:输出,看起来像程序无响应或死循环。
修复方案
有两种简单的方法解决这个问题:
- 方法1:在读取字符前清空缓冲区:在
scanf("%c", &choice)前调用getchar()吃掉残留的换行符。 - 方法2:修改scanf格式串:在
%c前添加一个空格,让scanf自动跳过所有空白字符(包括换行、空格、制表符)。
推荐使用方法2,代码更简洁且鲁棒性更强:
#include <stdio.h> int main() { float price, total; char choice; total = 0; choice = 'y'; while (1) { if (choice == 'n') { break; } printf("Enter price: "); scanf("%f", &price); total += price; printf("Continue?: "); // 格式串前的空格会跳过输入缓冲区中的所有空白字符 scanf(" %c", &choice); } printf("Total: %.2f\n", total); return 0; }
补充说明
scanf的格式规则中,空白字符(空格、换行、制表符等)会被视为分隔符,格式串中的空格会匹配任意数量的空白字符,直到遇到第一个非空白字符才会执行读取操作,这就完美规避了之前输入残留的换行符问题。
内容的提问来源于stack exchange,提问作者who
相关产品推荐
相关产品推荐

