繁体   English   中英

清除 C 中不正确的 scanf 输入

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM