【发布时间】:2020-02-14 17:00:56
【问题描述】:
所以,我正在用 C 语言开发一个简单的刽子手游戏,并且我有 read_guess 函数,如下所示。
void read_guess(char *guesses, char *p_current_guess)
{
int valid_guess = 0;
// Repeatedly takes input until guess is valid
while (valid_guess == 0)
{
printf(">>> ");
fgets(p_current_guess, 2, stdin);
if (!isalpha(*p_current_guess)) printf("Guesses must be alphabetic. Please try again.\n\n");
else
{
valid_guess = 1;
// Iterates over array of guesses and checks if letter has already been guessed
for (int i = 0; guesses[i] != '\0'; i++)
{
if (guesses[i] == *p_current_guess)
{
printf("You have already guessed this letter. Please try again.\n\n");
valid_guess = 0;
break;
}
}
}
}
}
我已经尝试了所有标准输入函数(包括 getchar),但是对于所有这些函数,当提供大于一个字符的输入时,而不是只取第一个字符并继续(或再次询问),输入的其余部分被“推回”,并且下一次请求输入时,无论是因为输入包含非字母字符还是下一轮开始,输入的其余部分都会自动处理。这对输入的每个字符重复。
我怎样才能避免这种情况?
【问题讨论】:
-
不,标准库函数没有这个功能。请记住,用户输入只是从文件中读取
-
用户将输入作为行输入?只需丢弃所有内容,直到在输入流中找到下一个换行符。如果输入了多个字符,则可选择触发错误。然后进行下一轮。