C编程:fflush(stdin)不能解决“ scanf()”的错误输入

时间:2019-09-26 03:45:33

标签: c types scanf stdin fflush

我尝试为scanf提供错误的值类型,然后尝试fflush(stdin)启动另一个scanf,如下所示:

#include<stdio.h>
int main(){
    int a,b,c,ret;
    ret=scanf("%d %d %d",&a,&b,&c);
    fflush(stdin);
    printf("ret=%d\n",ret);
    ret=scanf("%d %d %d",&a,&b,&c);
    printf("ret=%d\n",ret);
    return 0;
}

在运行程序时,我的输入和输出如下:

$ g++ sin.cpp && ./a.out
1 b 2
ret=1
ret=0

事实上,我想我应该有2次机会在第一行“ 1 b 2”之后输入一行,是的,“ scanf()”返回“ 1”,因为我的第二个参数“ b”不是整数,因此第一个printf给出“ ret = 1”。

但是为什么我的程序此后立即输出“ ret = 0”,而不运行

ret=scanf("%d %d %d",&a,&b,&c);

第二次给我机会输入吗?

我在Windows和Linux系统上都尝试了gcc,结果相同。真正感到困惑的是:当输入不匹配时,scanf()的预期行为是什么?如何解决这种情况,使我有机会提供正确的输入?

谢谢。

0 个答案:

没有答案