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

C语言逐单词输入逐字符打印时while死循环问题排查

问题根因

内层while循环无法终止是两个代码错误导致的:

  • 终止逻辑完全不符合需求:当前循环判断条件为reader >= 0时持续读取,而所有常规输入内容(字母、输入完成后按回车产生的换行符\n)的ASCII值均为非负数,只有输入流结束(手动触发EOF:Windows下按Ctrl+Z、Linux/macOS下按Ctrl+D)时getchar()才会返回负值的EOF,因此循环不会在单个单词输入完成后自动停止,会一直等待后续输入。
  • 变量类型不匹配:getchar()的返回值为int类型(专门用于兼容值为-1的EOF),你用char类型存储返回值,在默认char为无符号类型的编译环境中,即使读到EOF,转换为无符号char后也会变为正值,永远满足reader >=0的条件,彻底无法触发循环终止。
修正代码

调整内层循环终止条件,读到换行符(代表当前行输入的单词结束)就退出内层循环,同时修正reader的类型为int,增加EOF兜底判断避免异常死循环:

const int amountOfInputs = 5;    

for (int i = 1; i <= amountOfInputs; ++i)
{
    printf("Word Number # %d :\n", i );
    
    int reader;
    while( (reader = getchar()) != '\n' && reader != EOF ) 
    {
        printf("letters of word %d are: %c \n", i, reader);
    }
    // 读到EOF直接跳出外层循环,避免无意义的空转
    if (reader == EOF) break;
}

修正后运行逻辑:每提示输入一个单词,输入完成按回车后,会逐行打印该单词的所有字符,随后自动进入下一个单词的输入提示,完成5次输入后程序正常结束。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 11:12:21