fflush(stdin)在C++中是否真的需要,用這種方法刷新緩衝區中的換行符是否很好?fflush(stdin)的替代方案?
回答
呼叫到fflush(stdin)
是在C(和,consequetly,在C++)未定義的行爲。
C語言標準,ISO 9899:在7.19.5.2/2
1999年美國如果流點到輸出流或其中最近 操作不是輸入的更新流, fflush函數會將該流 的所有未寫入數據傳遞到主機環境以寫入文件;否則,該行爲是 未定義
要放棄整個輸入到行的下一個端部,在C++中,最可靠的方法是
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
至於節目「閃爍,要離開「,你是否可能在Windows平臺上執行控制檯應用程序?這樣的應用程序最好在控制檯窗口中執行(開始 - >運行 - > cmd.exe)
代碼末尾的getchar()
獲取stdin(輸入緩衝區)中的下一個字符。如果那裏沒有角色,那麼它將等待直到用戶輸入一些東西。 fflush(stdin)清除輸入緩衝區。
這就是爲什麼你的代碼將等待,如果你有fflush,因爲你清除輸入緩衝器,造成的getchar等待用戶的下一個輸入。不過,它看起來像是在緩衝區中留下了一些東西,導致getchar'get'它,這會結束您的程序。
如果你想程序保持開放大功告成之後,然後離開那裏平齊。如果您想立即關閉,請移除沖水。
使用cin.get()
,而不是getchar()
,你應該罰款。問題是C++ I/O流和C I/O函數在相同的文件描述符之上工作,但具有不同的緩衝區。我無法確定在沒有調試的情況下到底發生了什麼,但感覺就像您要調用暫停程序的getchar()
,直到輸入字符才能獲取已由C++輸入流讀取的字符。所以它獲取數據並取消阻止,所以你退出程序。
如果你還有問題,請確保您不輸入'\ n」字符(即不按Enter鍵)。因爲在輸入後按Enter鍵實際上是一個可以閱讀的字符。這個問題通常通過偷看來解決(參見http://www.cplusplus.com/reference/iostream/istream/peek/)。
- 1. 爲什麼不會fflush(stdin)的工作?
- 2. playN替代方案
- 3. Example.com替代方案
- 4. TFS替代方案
- 5. WSO2替代方案
- 6. Nginx:more_clear_headers替代方案
- 7. AppDomain.AppendPrivatePath替代方案?
- 8. Javascript。替代方案
- 9. android.net.wifi.WIFI_HOTSPOT_CLIENTS_CHANGED替代方案
- 10. MediaMetadataRetriever替代方案?
- 11. HTMLElementVariable.animate(...)替代方案?
- 12. 替代方案deleteOnExit
- 13. VSTO替代方案
- 14. fflush()函數不能使用stdin
- 15. fflush(stdin)函數不能正常工作?
- 16. _path的替代方案
- 17. $ httpProvider.responseInterceptors的替代方案
- 18. SELECT DISTINCT的替代方案
- 19. RPM的fakeroot替代方案
- 20. Treeview的替代方案
- 21. QUnit的替代方案
- 22. gethostbyname的替代方案
- 23. Java.sql.time的替代方案
- 24. Git的StatSVN替代方案?
- 25. ValidateRequest =「false」的替代方案
- 26. Cookie的替代方案
- 27. Android - OpenCV的替代方案?
- 28. JCA的替代方案
- 29. jpeg_read_header的替代方案libjpeg
- 30. iOS3的UILocalNotification替代方案
您不應該爲輸入流調用fflush。你也不應該混合使用C和C++ I/O。 – 2011-04-27 20:53:31