2
int main()
{
if (cin)
{
(...)
}
else
{
cerr << "No Data!!!" << endl;
}
}
我要檢查,如果輸入有數據,但不會顯示錯誤消息,即使一開始我只輸入按Ctrl +ž。如何檢查cin是文件的結尾?
int main()
{
if (cin)
{
(...)
}
else
{
cerr << "No Data!!!" << endl;
}
}
我要檢查,如果輸入有數據,但不會顯示錯誤消息,即使一開始我只輸入按Ctrl +ž。如何檢查cin是文件的結尾?
在嘗試讀取之前,流將不知道是否有任何有用的數據。至少,你需要看的第一個字符,例如,使用
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
}
的沒有數據的情況下可能是隱含可測試的,例如,通過觀察讀出的數據結構的大小。
我不想在開始時從cin讀入,因爲第一個條目可能有用。 – yughred
[cin.eof()functionality]的可能重複(http://stackoverflow.com/questions/4939251/cin-eof-functionality) – GingerPlusPlus
[在調用std :: getline之前檢查數據可用性](http:/ /stackoverflow.com/questions/3317740/checking-data-availability-before-calling-stdgetline) –