关于scanf对输入非法字符的检查和处理

由于函数scanf(),不做参数类型的匹配检查,因此,用户输入数据类型与格式字符不符合时,编译程序并不给出提示错误信息,然而却导致不能正确输入数据!

#include <stdio.h>

main()

{int a,b;

printf("input a:");

scanf("%d",&a);

printf("a=%d",a);

printf("input b:");

scanf("%d",&b);

printf("b=%d",b);
}

第一次测试程序时运行结果:

input a:1.4

a=1

input b:b=3129

第二次运行结果

input a:q

a=64

input b:b=3129——————————————————

怎样解决这个问题?

看下面程序:

#include <stdio.h>

int main(int argc, char* argv[])
{
int a,b,ret;
printf("Input a:");
ret=scanf("%d",&a);
if(ret==0) //遇到非法字符的输入
{
printf("Input data type error!\n");
fflush(stdin);//清除输入缓冲区的错误数据
}
else if(ret==EOF)//scanf调用失败
{
printf("Input failure occurs!\n");
}
else
{
printf("a=%d\n",a);
}

printf("Input b:");
ret=scanf("%d",&b);
if(ret==0)
{
printf("Input data type error!\n");
fflush(stdin);
}
else if(ret==EOF)
{
printf("Input failure occurs!\n");
}
else
{
printf("b=%d\n",b);
}
return 0;
}
解决这个问题,我们可以考虑检验函数scanf()调用返回值的方法。如果函数scanf()调用成功的话,则其返回值为已成功读入的数据项数。通常非法字符的输入会导致数据不能成功读入。如果scanf()调用失败,则返回EOF,通常是无数据可读是才会发生这种情况,例如,当标准输入被重定向到一个输入文件时,程序执行函数scanf()就是从该文件中读入数据,当读到文件尾没有数据可读时,函数scanf()调用就会失效,如果用户按F6键强制输入结束,此时测试函数scanf()的返回值也是EOF.
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值