我想通過cin緩衝區讀取我的程序,直到它沒有任何內容讀取。用cin緩衝區做東西直到空
什麼了很多地方似乎暗示了這是:
while (cin)
{
cin >> s;
//do stuff with s
}
然而,當我嘗試這一點,即使在CIN緩衝區是空的,用於輸入和執行循環的程序只是無限地等待。
這樣做(cin >> s)完全相同的事情。
我想通過cin緩衝區讀取我的程序,直到它沒有任何內容讀取。用cin緩衝區做東西直到空
什麼了很多地方似乎暗示了這是:
while (cin)
{
cin >> s;
//do stuff with s
}
然而,當我嘗試這一點,即使在CIN緩衝區是空的,用於輸入和執行循環的程序只是無限地等待。
這樣做(cin >> s)完全相同的事情。
如果標準輸入連接到終端,程序將等待輸入直到它得到一個EOF條件,您可以對POSIX系統發送一個按Ctrl-d
你是正確的,它將等待永遠換一個新的路線。
你可以做的是這樣的:
while(cin >> s){
//do stuff with s
}
這樣做是什麼,而你仍然可以讀入當時的做的東西。你最終會在緩衝區結束時停止。
我相信,你正在做的方式,電腦認爲它仍然可以有進來的一些信息。
我也試過這個,不幸的是它做了同樣的事情。 – aredscout 2014-09-25 16:58:00
您必須使用EOF字符表示輸入(CIN結束)結束。你可以使用linux上的ctrl-D或windows上的ctrl-Z來做到這一點。 – icedtrees 2014-09-25 16:50:23
我建議'while(cin >> s){...}'來代替。用你的問題中的代碼,當'cin'沒有更多輸入時,循環會執行一次,這意味着它將處理最後一次讀取元素兩次。 – cdhowie 2014-09-25 16:50:41
另請注意,「緩衝區爲空」不是讀取失敗的條件。如果緩衝區確實是空的,但是stdin的文件句柄沒有關閉,'cin >> s'會直接*阻塞*,直到有更多的輸入需要讀取。正如@icedtrees所說,您需要在Windows上的* nix或^ Z上使用^ D,以便指示shell關閉stdin文件句柄。此時,讀取將失敗,eof位將被設置在'cin'上。 – cdhowie 2014-09-25 17:01:02