黑馬程式設計師 關於scanf無限迴圈的問題

2021-06-20 19:28:49 字數 540 閱讀 4382

---------------------- asp.net+unity開發、.net培訓、期待與您交流! ----------------------

最近在學的時候,遇到一段下面的**。

int n = 0;

while(n <= 0)

本意是如果使用者輸入的是乙個負數。那麼提示使用者說要輸入乙個正整數。但是在測試的時候。我隨便輸入了乙個字母。比方說a 。結果卻是程式一直列印「請輸入乙個正整數」!感覺很奇怪。這**看上去應該沒什麼問題啊,怎麼會陷入死迴圈呢。經過思考,發現問題出在scanf函式上。

原來,在scanf轉換數字的時候,它遇到的任何非數字字元都會終止轉換並儲存在輸入流中。因此,除非採用了其他的步驟,那麼未預料到的非數字輸入會不斷「阻塞」scanf,因為scanf永遠都不能越過錯誤的非數字字元而處理後邊的合法數字字。終於找到了問題的所在!

---------------------- asp.net+unity開發、.net培訓、期待與您交流! ----------------------

黑馬程式設計師 gets 和scanf

一 scanf與gets函式的區別 1.利用scanf函式從鍵盤接收一字元 或整數 時,它唯讀入字元 或整數 本身,而把字元 或整數 後的回車符留在輸入緩衝區內 2.gets函式從標準的輸入讀取,如果使用gets函式給字元陣列輸入字串時,字元陣列不能指定長度,因為,只要字元陣列的長度小於gets函式...

黑馬程式設計師 gets 和scanf

一 scanf與gets函式的區別 1.利用scanf函式從鍵盤接收一字元 或整數 時,它唯讀入字元 或整數 本身,而把字元 或整數 後的回車符留在輸入緩衝區內 2.gets函式從標準的輸入讀取,如果使用gets函式給字元陣列輸入字串時,字元陣列不能指定長度,因為,只要字元陣列的長度小於gets函式...

05 黑馬程式設計師 scanf函式 printf函式

這也是在stdio.h中宣告的乙個函式,因此使用前必須加入 include 呼叫scanf函式時,需要傳入變數的位址作為引數,scanf函式會等待標準輸入裝置 比如鍵盤 輸入資料,並且將輸入的資料賦值給位址對應的變數 函式原型 int scanf constchar format,scanf 函式返...