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

如何在Hangman游戏中使用scanf仅读取用户输入的首个字符?

解决Hangman游戏中scanf读取多字符的问题

你的问题出在输入缓冲区未清空:当用户输入moo并回车后,输入缓冲区里会残留oo\n,循环里的下几次scanf会直接读取这些残留字符,导致一次输入触发多次猜测。下面给两种解决办法:

方法一:读取单个字符后清空缓冲区

在读取目标字符后,用循环把缓冲区里剩余的字符全部读完,直到遇到换行符或EOF:

#include <stdio.h>

// ... 其他代码

char guessed_letter;
printf("\n");
// 读取第一个非空白字符(前面的空格跳过换行、空格等空白)
scanf(" %c", &guessed_letter);

// 清空输入缓冲区
int c;
while ((c = getchar()) != '\n' && c != EOF);

方法二:用fgets读取整行再取第一个字符

这种方法更安全,能避免输入过长导致的缓冲区溢出问题,同时直接忽略整行里除第一个有效字符外的所有内容:

#include <stdio.h>
#include <ctype.h> // 用于isspace函数

// ... 其他代码

char input[100];
char guessed_letter;
printf("\n");
// 读取整行输入
fgets(input, sizeof(input), stdin);

// 跳过前面的空白字符(空格、换行等),找到第一个有效字符
int i = 0;
while (input[i] != '\0' && isspace(input[i])) {
    i++;
}
// 如果找到有效字符,赋值给guessed_letter
if (input[i] != '\0') {
    guessed_letter = input[i];
}

两种方法都能确保每次只处理用户输入的第一个有效字符,后续输入会被直接丢弃,不会影响下一次猜测循环。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 22:55:16