C語言 清空緩衝區

2021-10-05 22:43:42 字數 533 閱讀 4841

考慮到下面的**

#includeint main()while(n!=-1);

return 0;

}

就是輸入乙個數, 然後輸出這個數,  如果輸入-1 就表示結束。 但是如果使用者不小心輸入了乙個字母 , 或者其他非數字字元,就會發生死迴圈,這是為什麼呢?

這是因為scanf函式是從緩衝區讀取乙個指定格式的變數。並且返回成功讀入變數的個數。如果輸入了字母,那麼一直沒有讀入成功,該字元一直呆在緩衝區中,下一次迴圈時又遇到它, 又讀入失敗,然後就造成了死迴圈。

可以考慮每次讀完資料之後把緩衝區清空,c語言提供多種辦法清空緩衝區,我用的是下面這種

char ch; while((ch = getchar()) != '\n' && ch != eof);
加上這個之後程式就可以健壯的執行啦!

#includeint main()while(n!=-1);

return 0;

}

清空輸入緩衝區

清空輸入緩衝區 cin.clear 清除錯誤標記,比如要求輸入int型,但我們輸入了char型,就會導致輸入錯誤,產生錯誤標記 cin.sync 清空輸入緩衝區 cin.ignore n,ch 第乙個引數是清空輸入緩衝區的大小,第二個引數是終止字元 注 終止字元也會被丟棄 常用形式有以下兩種 cin...

檔案操作 清空緩衝區

在進行輸入輸出操作或者檔案讀寫時,由於涉及到緩衝區的使用,可能遇到一些問題。例如,scanf 函式用於從stdin輸入資訊,在從標準輸入緩衝區讀取資訊時,往往以 n 作為結束輸入的標誌,但是換行符 n 仍然殘留在緩衝區中,下次再次從標準輸入讀取資訊時,殘留的換行符 n 會被當做有效資訊讀取,即,上一...

我這樣清空緩衝區

若緩衝區是在棧內分配是的則不需要手動清除,因為系統會幫你做完成這個工作,但是如果緩衝區分配在堆內的話就要自己手動清除了,不然會發生記憶體洩露。產生的問題就是占用的資源不能及時釋放,從而影響系統效能。清理緩衝區的三種方法 fflush stdin fflush stdin 在vc上可以使用,但是其他編...