2014-02-24 77 views

回答

6

你可能被告知fflush(stdin)是未定義的,這是正確的。但是fflush是您想要刷新的其他流的路線,例如stdout

爲了澄清,該流必須用於輸出。該標準說:

如果流點到輸出流或其中 最近的操作不是輸入的更新流,fflush函數使該流的任何 未寫入的數據被傳遞到主機環境將 寫入文件;否則,行爲是不確定的。

後來的標準包括這種明確爲「未指定的行爲」:

流爲fflush函數指向一個輸入流或到 更新流其中最近一次操作是輸入

+0

驅動器downvoter:我很擔心你。現在來評論,我們可能仍然能夠幫助你。 – cnicutar

4

您誤會了。

上的輸入流調用fflush()已至於C標準而言有些系統和/或二級標準,如POSIX可以定義其行爲未定義的行爲,但它不是依靠在代碼是個好主意這是爲了便攜。

在輸出流上調用fflush(),例如fflush(stdout),是完全安全和明確的。它會導致任何掛起的輸出被傳送到操作系統(不保證它將被傳送到物理輸出設備)。

在某些情況下,在輸入流上調用fflush時,實際上應該讀取並放棄輸入字符,例如,直到看到換行符'\n'EOF。或者,通常更好的方法是使用fgets或類似的方法一次讀取整行,然後解析輸入。

+0

+1只要最後一個操作符是'out',而不是'in',它就可以被調用到輸入輸出流中(我還記得,我還記得,從'out'到''in'ops *要求* fflush()'*或* seek-op。如果我記錯了,我會提前道歉,因爲我很少發現自己在全模式下操作文件。 – WhozCraig

+0

但我的大學教授教我這是好的,我很困惑,因爲它與輸入流很好地工作 – YakRangi

+1

@Bayant_singh如果你的大學教授教你'fflush()只輸入流是好的和好的,你不是唯一的應該在尋求教育,它可能在你的平臺上「工作」,但不要指望它「作爲」一種基於語言標準的規則。 – WhozCraig

相關問題