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

