C语言 scanf 设置为%d却输入汉字出现循环问题解决

C语言 scanf 设置为%d却输入汉字出现循环问题解决

我们小伙伴在学习C语言时可能会遇到这样的问题:scanf("%d",&n);然后不小心输入了汉字,结果就不对了,出现循环,有些编译器可能还会直接崩溃,所以我查阅资料发现可以勉强解决这个问题。

1.使用fflush(stdin)。
fflush(stdin)是一个计算机专业术语,功能是清空输入缓冲区,通常是为了确保不影响后面的数据读取(例如在读完一个字符串后紧接着又要读取一个字符,此时应该先执行fflush(stdin);
有时候我们scanf输入时最后要按一个回车或者空格才能完成输入,这时计算机输入缓冲区内存在着一个空格或者回车,所以我们一般会在后面加一个getchar();获取到缓冲区内被输入多余的空格或者汉字,这样就不会影响下一个输入。而fflush(stdin);也有同样的功能,不过fflush(stdin)功能更强大,它还可以更新缓冲区。
2.利用scanf()函数的返回值。
例如: scanf("%d %d",&a,&b);
函数返回值为int型。如果a和b都被成功读入,那么scanf的返回值就是2;
如果只有a被成功读入,返回值为1;
如果a和b都未被成功读入,返回值为0;
如果遇到错误或遇到end of file,返回值为EOF。end of file为Ctrl+z 或者Ctrl+d。EOF也就是-1。

所以从上面两点加起来可以勉强解决。
代码如下:
解决代码
不过有些编译器输入数字+汉字一起的话(例如:123张三);scanf()会判定为123从而返回1.但是却不会发生循环了,也不会造成程序崩溃。
所以我说只能勉强解决问题。若有那位读者有更高的见解或者解决方案,请联系评论哦,谢谢。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值