我尝试为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()的预期行为是什么?如何解决这种情况,使我有机会提供正确的输入?
谢谢。