考慮到下面的**
#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上可以使用,但是其他編...