1. 程式人生 > >關於C語言中的scanf()函式

關於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()函式會一直重複讀取錯誤的輸入,一直報錯,真是讓人頭大。

至於解決方案… 把進入迴圈的條件改成輸入為一個字元就行了。

以上