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

C语言Hangman游戏while循环异常:第二次迭代跳过输入

解决Hangman猜单词游戏中输入跳过的问题

问题根源

你的代码里getchar()会读取输入缓冲区的残留换行符。第一次输入字符后按回车,输入的字符被getchar()读取,但回车产生的\n会留在缓冲区中。第二次循环时,getchar()直接读取了这个换行符,导致程序跳过等待用户输入的步骤。

解决方案

有两种简单的修复方式:

方式一:用scanf替代getchar

scanf可以通过格式控制符前的空格自动跳过空白字符(包括换行符),修改读取字符的代码:

char guess;
scanf(" %c", &guess); // %c前的空格用于跳过所有前导空白

方式二:清空输入缓冲区残留字符

如果坚持用getchar,在读取目标字符后,额外读取缓冲区剩余的字符直到遇到换行:

char guess;
guess = getchar();
// 清空缓冲区里的残留字符
while (getchar() != '\n');

修复后的完整代码示例(使用scanf方式)

void startGuessing(char *word){
    char dummyWord[13];
    strcpy(dummyWord, word);

    int dummyWordLength = strlen(dummyWord);
    for (size_t i = 0; i < dummyWordLength; i++)
    {
        dummyWord[i] = '_';
    }

    int remaindingChances = 7;
    while(remaindingChances > 0){
        printf("玩家2当前已猜出:%s\n", dummyWord);
        printf("玩家2,你还剩%d次猜测机会,请输入下一个猜测字符:\n", remaindingChances);

        char guess;
        scanf(" %c", &guess);

        int wordLength = strlen(word);
        for (size_t i = 0; i < wordLength; i++)
        {
            if(guess == word[i]){
                dummyWord[i] = word[i];
            }
        }

        remaindingChances--;
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 01:55:18