現象描述:在編寫C語言程序時,需要使用scanf語句從鍵盤上輸入一個整型的數時,當錯誤的輸入了字符時,scanf語句就好像不會執行,但從鍵盤輸入其他數字又無法獲取。
問題分析:當定義scanf語句接收整型數值時,它就會跳過所有的非數字的字符,專接收數字。當輸入了字符時,字符就會留在緩衝區,只要緩衝區又字符,scnaf就會去讀,一讀發現不是數字,就會跳過,只有當輸入緩衝區沒有字符了纔等待你去輸入,這個過程會反覆的進行,造成死循環。
問題解決:可以在scanf語句後面加上getchar()這個函數,用來接收非數字字符,這樣當輸入非數字字符時,這個字符就被getchar()這個函數接收了,不會留在scanf的shur輸入緩衝區,scnaf就不會去讀它,就不會出現死循環。