int main()
{
if (cin)
{
(...)
}
else
{
cerr << "No Data!!!" << endl;
}
}
Run Code Online (Sandbox Code Playgroud)
我想检查输入是否有任何数据,但是即使我在开始时只输入Ctrl+也不会显示错误消息Z。
在您尝试读取之前,流不会知道是否有任何有用的数据。至少您需要查看第一个字符,例如,使用
if (std::cin.peek() != std::char_traits<char>::eof()) {
// do something with the potentially present input.
}
else {
// fail
}
Run Code Online (Sandbox Code Playgroud)
您更有可能依赖于一些可用的非空间数据。如果是这样,您可以查看文件中是否还有空间以外的内容:
if (!(std::cin >> std::ws).eof())
...
Run Code Online (Sandbox Code Playgroud)
该机械手 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
}
Run Code Online (Sandbox Code Playgroud)
无数据情况可以是隐式可测试的,例如,通过查看读取数据结构的大小。