【发布时间】:2021-12-28 01:07:57
【问题描述】:
我已经搜索了互联网以及我的教科书和讲座以寻找解决此问题的方法,但似乎没有任何效果。
我正在使用 scanf 获取整数输入,并且需要验证正确的输入。
但是,当我将两个字符或两个中间有空格的数字放入 scanf 时,它会运行两次而不是一次,因为 scanf 会挂在未使用的数据上。
我终其一生都无法弄清楚如何清除 scanf 数据,或者让它将所有输入作为一个错误输入一起读取。我知道如何清除 \n,而不是输入中留下的尾随字符。
int scan;
bool validInput = false;
int validScan;
int count = 0;
do
{
puts("Enter pin : ");
validScan = scanf("%d", &scan);
((getchar()) != '\n');
if(validScan !=1)
{
count++;
puts("Incorrect pin entered.");
}
else if(scan != PIN)
{
count++;
puts("Incorrect pin entered.");
}
else
{
validInput = true;
count = 3;
}
} while (count < 3);
return validInput;
【问题讨论】:
-
发布你的代码?
-
如果您的
scanf()调用失败,通常明智的做法是读取并包含下一个换行符:int c; while ((c = getchar()) != EOF && c != '\n') ;(循环后的分号通常单独一行表示一个空的循环体)。您可以创建一个inline函数来完成这项工作,或者创建一个真正的函数。使用fgets()读取行并使用sscanf()进行解析也是一种非常好的技术——尤其是因为您可以更明智地报告导致问题的输入(它保存在fgets()和sscanf()使用的输入缓冲区中) . -
另请参阅Using
fflush(stdin)? 并仔细阅读并极其谨慎地使用(最好不要使用)。另见How to read/parse input in C? The FAQ。 -
PleaseHelpMe222,如果用户输入的行只有
"\n"会发生什么?