2011-05-26 217 views
0

我曾經使用fflush(stdin)。我看,這不是擺脫多餘的字符的好方法,它是更好地用fgets這樣的:fgets的沖洗緩衝區

fgets(buffer,maxsize,stdin); 

的情況下,我想處理這些額外字符的......什麼樣我應該使用緩衝區?我可以在某種「不歸路」的緩衝區中重定向嗎?或者我必須使用有限大小的數組?

在此先感謝。

+0

你究竟想要完成什麼?跳到一行的結尾? – 2011-05-26 12:09:38

+0

我想讀取一個整數並「扔掉」所有剩餘的行輸入。 – kaiseroskilo 2011-05-26 12:14:17

+0

[Using fflush(stdin)](http://stackoverflow.com/questions/2979209/using-fflushstdin) – Lundin 2011-12-19 07:25:10

回答

3
+6

雖然這可能在理論上回答這個問題,[這將是更可取的](http:// meta。 stackexchange.com/q/8259)在這裏包括答案的基本部分,並提供參考鏈接。 – NullUserException 2011-12-17 02:28:45

+1

@NullUserException不,最好關閉這篇文章,因爲這個問題已經被[多次]回答了(http://stackoverflow.com/search?q=fflush+stdin+undefined+behavior)。 – Lundin 2011-12-19 07:23:51

2

使用consumetoendofline(stdin)代替:)

int consumetoendofline(FILE *where) { 
    int ch; 
    while (((ch = fgetc(where)) != '\n') && (ch != EOF)) /* void */; 
    return ch; 
} 

你可以(,應該)甚至測試返回值,看是否流已經到達終點,或者有可能是更數據等待...