int main()
{
if (cin)
{
(...)
}
else
{
cerr << "No Data!!!" << endl;
}
}
我想检查输入是否有任何数据,但即使我只在开头输入 Ctrl + Z ,也不会显示错误信息。
答案 0 :(得分: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
}
无数据情况可以隐式测试,例如,通过查看读取数据结构的大小。