2015-12-14 48 views
2
int main() 
{ 
    if (cin) 
    { 
     (...) 
    } 
    else 
    { 
     cerr << "No Data!!!" << endl; 
    } 
} 

我要檢查,如果輸入有數據,但不會顯示錯誤消息,即使一開始我只輸入按Ctrl +ž如何檢查cin是文件的結尾?

+0

我不想在開始時從cin讀入,因爲第一個條目可能有用。 – yughred

+0

[cin.eof()functionality]的可能重複(http://stackoverflow.com/questions/4939251/cin-eof-functionality) – GingerPlusPlus

+1

[在調用std :: getline之前檢查數據可用性](http:/ /stackoverflow.com/questions/3317740/checking-data-availability-before-calling-stdgetline) –

回答

4

在嘗試讀取之前,流將不知道是否有任何有用的數據。至少,你需要看的第一個字符,例如,使用

if (std::cin.peek() != std::char_traits<char>::eof()) { 
    // do something with the potentially present input. 
} 
else { 
    // fail 
} 

更有可能的是,你會依靠一些非空間數據是可用的。如果是這樣,你可以看到,如果有比其他空間的東西在文件中:

if (!(std::cin >> std::ws).eof()) 
    ... 

操縱std::ws將跳過前導空白。當到達非空白字符或文件末尾時它將停止。如果文件結束,std::cin.eof()將是true

一般來說,我不打擾,而是嘗試閱讀第一項。如果什麼都沒有讀它仍然是可行的失敗:

bool hasData = false; 
while (std::cin >> some >> data) { 
    hasData = true; 
    // do something with the input 
} 
if (!hasData) { 
    // report that there was no data at all 
} 

的沒有數據的情況下可能是隱含可測試的,例如,通過觀察讀出的數據結構的大小。

相關問題