[英]Detecting EOF in C++ from a file redirected to STDIN
執行命令:
./program < input.txt
使用以下代碼檢查:
string input;
while(cin) {
getline(cin, input);
}
上面的代碼似乎生成了一個額外的getline()
調用,其中輸入為空。 無論input.txt的最后一行是否有\\n
,都會發生這種情況。
@Jacob有正確的解決方案但由於某種原因刪除了他的答案。 這是你的循環中發生的事情:
cin
是否有任何故障位(BADBIT,FAILBIT) cin
報告沒有問題,因為尚未從文件中讀取任何內容。 getline
,檢測文件結束,設置EOF位和FAILBIT。 你需要做這樣的事情:
std::string input;
while(std::getline(std::cin, input))
{
//Have your way with the input.
}
這個怎么樣:
string input;
while(getline(cin, input)) {
//do something with input...
}
編輯:請注意,在下面的例子中,我向您展示“如何檢測EOF”。 正如@Billy指出的那樣,您可能希望使用good()
而不是eof()
來檢測任何錯誤條件或 eof。 我在答案的最后列出了有關這方面的信息,但這很重要,所以我在頂部添加了這個注釋以確保它清楚。
(原始答案如下)
你要這個:
string input;
while( !cin.eof() ) {
getline(cin, input);
}
使用operator!
在iostream
僅檢查是否發生了故障或其他錯誤情況。 ios :: operator!() 。
您可以使用good()
代替!eof()
來檢查eof
, badbit
或failbit
任何條件。 ios :: good() 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.