sanf()函数不做参数类型匹配检查。一旦遇到非法字符输入,编译程序并不提出错误信息,函数scanf()就认为输入数据结束,导致不能正确读入输入数据。
下面的程序可作为scanf()函数输入非法字符的处理:
//scanf()函数输入非法字符的处理
#include
main ()
{
inta,b ,ret;
A:
printf("输入a和b的值:\n");
ret= scanf("%d%d",&a,&b);
if(ret!=2)
{
printf("Input error!\n\n");
fflush(stdin);
printf("请重新输入:\n");
gotoA;
}
else
{
printf("你输入的a=%d, b=%d\n",a,b);
}
}
//scanf()函数输入非法字符的处理
#include
main ()
{
int a,b ,ret;
A:
printf("输入a和b的值:\n");
ret= scanf("%d%d",&a,&b);
if (ret!=2)
{
printf("Input error!\n\n");
fflush(stdin);
printf("请重新输入:\n");
goto A;
}
else
{
printf("你输入的a=%d, b=%d\n",a,b);
}
}
代码截图为:
调试截图为:
当输入“1.a
”,空格,“3”时就出现了错误提示,并要求重新输入。
值得注意的是scanf()函数有函数返回值,如果scanf()函数调用成功(能正常读入输入数据),则其返回值为已成功读入数据的个数(而不是已成功读入的数据)。(所以ret!=2,能作为scanf()函数没有成功调用的条件)