关于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()函数会一直重复读取错误的输入,一直报错,真是让人头大。

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

以上

猜你喜欢

转载自blog.csdn.net/Abel2333/article/details/82820851
今日推荐