关于C语言中的scanf()函数

在《C Primer Plus》中有如下代码:

......
while(scanf("%d", &num))
{
...
}
......

当输入不是整数的时候就停止循环
那么是不是也可以试试这样呢?

......
while (scanf"%d", num)==0)
{
printf ("You're wrong! Enter a number please: ");
}
......

看看这样会输出什么:

c
You're wrong! Enter a number please: You're wrong! Enter a number please: 
You're wrong! Enter a number please: You're wrong! Enter a number please: 
You're wrong! Enter a number please: You're wrong! Enter a number please: 
You're wrong! Enter a number please: You're wrong! Enter a number please: 
......

对,这个循环成了个死循环,无法停止!

*为什么会这样呢…第一次用了while循环,第一次试着用每次的输入判断循环,两件快乐的事情重合在一起,而这两份快乐又给我带来更多的快乐。得到的本应该是像梦境一样幸福的时间…但是,为什么,会变成这样呢… *

咳,皮这一下很开心。

回到正题,为什么输入一次错误答案后就一直循环呢?
注意,错误一次后程序并未给我再次输入的机会。这很重要,依次判断,大概是scanf()函数出了错误。
于是查找资料,由于我记得以前似乎见过这方面的东西,只要找找以前的记录很快就找到了:

这意味着程序在下次读取输入时,首先读到的是上次读取丢弃的错误字符。
——《C Primer Plus》

emmmm,就在那本书的前面。。。让你看书不认真

就是说scanf()函数会一直重复读取错误的输入,一直报错,真是让人头大。

至于解决方案…
把进入循环的条件改成输入为一个字符就行了。

以上

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值