这是我在几周前刚开始学习 C 时发布的第一个关于 C 编程的问题。我会写下我的代码并询问我的问题是什么 :) 如果有人知道我可以如何解决我的错误或我应该替换我的代码的任何内容,请回复:)!
我遇到的问题是,如果您自己运行代码,您会发现一切正常,除了语句中的“else”部分。我遇到的问题是,当有人键入多个字母时,它将多次运行最后一个 printf 语句,并且 printf
的次数与用户输入 y 或 n 以外的字符的次数一样多.
带有 Y 或 N 的第一部分工作正常,但如果他们输入任意数量的其他字符,它不只是说“请再次选择”,一次然后重新扫描,它至少输入 2 个 printfs ,即使输入一个字符,“请再次选择”“请再次选择”,然后,如果您输入更多字符作为答案,它只会输入更多“请再次选择”。
请帮助我理解我做错了什么,因为我非常热衷于学习正确编程,但我只是被困在这里 atm :)
#include <stdio.h>
#include <conio.h>
int main()
{
char answer;
int loop = 0;
printf("Please select. [Y/N]:\n");
while (loop == 0)
{
scanf("%c", &answer);
if (answer == 'y' || answer == 'Y')
{
printf("Seeyou Later Aligator.\n");
break;
return 0;
}
else if (answer == 'n' || answer == 'N')
{
printf("Mmkay.\n");
break;
return 0;
}
else
{
printf("Please select again [Y/N]:\n");
loop = 0;
}
}
getch();
return 0;
}
最佳答案
scanf
每次读取所需数量的字符。如果有更多字符,则不会忽略它们。下次调用 scanf
时会读取它们。因此,您会看到每个字符都有多个打印件。为了显式忽略挂起的输入,请在 scanf 之后调用 fflush(stdin)
。这意味着清除标准输入流中的所有数据。
更新:
fflush
不应如注释中所述用于输入流。使用公认的解决方案来忽略输出。不过,我建议使用 toupper
或 tolower
而不是 bit hack。
关于c - 意外调用 printf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19508737/