1. 程式人生 > >關於fgets從鍵盤讀取,直接跳過鍵盤輸入的問題

關於fgets從鍵盤讀取,直接跳過鍵盤輸入的問題

今天寫程式用到了fgets函式,想直接從鍵盤輸入資料到陣列,前面使用了scanf輸入int型別的數字,沒想到執行到fgets直接不等我輸入資料就跳過了,在網上查了一下,原來是stdin快取沒有清除乾淨的緣故:
C語言裡的gets()函式功能是從輸入快取中讀取多個字元,遇到回車符時,結束輸入。當使用gets()函式之前有過資料輸入,並且,操作者輸入了回車確認,這個回車符沒有被清理,被儲存在輸入快取中時,gets()會讀到這個字元,結束讀字元操作。因此,從使用者表面上看,gets()沒有起作用,跳過了。
解決辦法:
方法一、在gets()前加fflush(stdin); //強行清除快取中的資料(windows下可行)
方法二、根據程式程式碼,確定前面是否有輸入語句,如果有,則增加一個getchar()命令,然後再呼叫 gets()命令。
方法三、檢查輸入結果,如果得到的字串是空串,則繼續讀入,如:

 char str[100]={0};

            do {

                gets(str);

            } while( !str[0] );