c语言标识符非法字符,C语言中scanf( )函数对输入非法字符的检查与处理

由于函数scanf( )不做参数类型匹配检查,因此,当输入数据类型与格式字符不相符时,编译器并不提示错误信息,然而不能正确读入数据。

怎么解决这个问题呢?我们可以考虑检验函数scanf( )调用返回值的方法。如果函数scanf( )调用成功(能正确读入输入数据),则返回值为已成功读入的数据项数。当用户输入不相符的数据类型时,我们可以在程序中,给出错误的提示,采用函数fflush( )来清除缓冲区中的内容,然后提示用户重新输入数据直到输入正确为止。

由于ANSI C只规定函数fflush( )处理输出数据流、确保输出缓冲区中的内容写入文件,并未对清理输入缓冲区作出任何规定,只是部分编译器(如Visual C++和Turbo C等)增加了此项功能,因此使用函数fflush( )来清除输入缓冲区中的内容,可能会带来移植问题。

下面的程序用于解决上面问题:

#include

void main()

{

int a,b,ret;

do

{

printf("Input a and b:\n");

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

if (ret!=2)//输入错误,如输入格式错误,存在非法字符等

{

printf("Input error!\n");

fflush(stdin);//清除缓冲区中的错误信息

}

}while(ret!=2);

printf("a=%d, b=%d\n",a,b);

}

程序运行结果为:

1362916607_7676.jpg

  • 0
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值