2014-09-25 55 views
0

我想通過cin緩衝區讀取我的程序,直到它沒有任何內容讀取。用cin緩衝區做東西直到空

什麼了很多地方似乎暗示了這是:

while (cin) 
{ 
    cin >> s;  
    //do stuff with s 
} 

然而,當我嘗試這一點,即使在CIN緩衝區是空的,用於輸入和執行循環的程序只是無限地等待。

這樣做(cin >> s)完全相同的事情。

+0

您必須使用EOF字符表示輸入(CIN結束)結束。你可以使用linux上的ctrl-D或windows上的ctrl-Z來做到這一點。 – icedtrees 2014-09-25 16:50:23

+3

我建議'while(cin >> s){...}'來代替。用你的問題中的代碼,當'cin'沒有更多輸入時,循環會執行一次,這意味着它將處理最後一次讀取元素兩次。 – cdhowie 2014-09-25 16:50:41

+0

另請注意,「緩衝區爲空」不是讀取失敗的條件。如果緩衝區確實是空的,但是stdin的文件句柄沒有關閉,'cin >> s'會直接*阻塞*,直到有更多的輸入需要讀取。正如@icedtrees所說,您需要在Windows上的* nix或^ Z上使用^ D,以便指示shell關閉stdin文件句柄。此時,讀取將失敗,eof位將被設置在'cin'上。 – cdhowie 2014-09-25 17:01:02

回答

2

如果標準輸入連接到終端,程序將等待輸入直到它得到一個EOF條件,您可以對POSIX系統發送一個按Ctrl-d

0

你是正確的,它將等待永遠換一個新的路線。

你可以做的是這樣的:

while(cin >> s){ 
    //do stuff with s 
} 

這樣做是什麼,而你仍然可以讀入當時的做的東西。你最終會在緩衝區結束時停止。

我相信,你正在做的方式,電腦認爲它仍然可以有進來的一些信息。

+0

我也試過這個,不幸的是它做了同樣的事情。 – aredscout 2014-09-25 16:58:00