【问题标题】:How to check cin is end of file?如何检查cin是文件结尾?
【发布时间】:2015-12-14 18:59:12
【问题描述】:
int main()
{
    if (cin)
    {
        (...)
    }
    else
    {
        cerr << "No Data!!!" << endl;
    }
}

我想检查输入是否有数据,但是即使我在开头只输入Ctrl+Z,也不会显示错误信息。

【问题讨论】:

标签: c++


【解决方案1】:

在您尝试读取之前,流不会知道是否有任何有用的数据。至少您需要查看第一个字符,例如,使用

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
}

无数据情况可能是隐式可测试的,例如,通过查看读取数据结构的大小。

【讨论】:

    猜你喜欢
    • 2015-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-06
    • 2016-01-10
    • 2019-05-10
    • 2013-07-12
    相关资源
    最近更新 更多