Drip 2018-09-23
在《C Primer Plus》中有如下代码: ...... while(scanf("%d", &num)) { ... } ...... 1 2 3 4 5 6 当输入不是整数的时候就停止循环 那么是不是也可以试试这样呢? ...... while (scanf"%d", num)==0) { printf ("You're wrong! Enter a number please: "); } ...... 1 2 3 4 5 6 看看这样会输出什么: 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: ...... 1 2 3 4 5 6 对,这个循环成了个死循环,无法停止! *为什么会这样呢…第一次用了while循环,第一次试着用每次的输入判断循环,两件快乐的事情重合在一起,而这两份快乐又给我带来更多的快乐。得到的本应该是像梦境一样幸福的时间…但是,为什么,会变成这样呢… * 咳,皮这一下很开心。 回到正题,为什么输入一次错误答案后就一直循环呢? 注意,错误一次后程序并未给我再次输入的机会。这很重要,依次判断,大概是scanf()函数出了错误。 于是查找资料,由于我记得以前似乎见过这方面的东西,只要找找以前的记录很快就找到了: 这意味着程序在下次读取输入时,首先读到的是上次读取丢弃的错误字符。 ——《C Primer Plus》 emmmm,就在那本书的前面。。。让你看书不认真 就是说scanf()函数会一直重复读取错误的输入,一直报错,真是让人头大。 至于解决方案… 把进入循环的条件改成输入为一个字符就行了。