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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 22:54:59