[英]Clearing incorrect scanf inputs in C
我已经在互联网和我的教科书和讲座上搜索了解决此问题的方法,但似乎没有任何效果。
我正在使用 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 时,它会运行两次而不是一次,因为 scanf 会挂在未使用的数据上。
您需要将用户输入的解释与读取用户输入分离。
因此,不要使用同时执行这两项操作的scanf
:
int num1, num2;
bool success = (scanf("%d %d", &num1, &num2) == 2);
使用fgets
读取它并使用sscanf
来解释它:
char buf[1024];
bool success = false;
if(fgets(buf, 1024, stdin) != NULL)
success = (sscanf(buf, "%d %d", &num1, &num2) == 2);
另请参阅scanf 与 fgets 。
你可以使用fflush(stdin);
在 scanf 之前清理输入。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.