C++ 如何检查cin是否为文件结尾? intmain() { 如果(cin) { (...) } 其他的 { cerr

C++ 如何检查cin是否为文件结尾? intmain() { 如果(cin) { (...) } 其他的 { cerr,c++,C++,在您尝试读取之前,流将不知道是否有任何有用的数据。至少您需要查看第一个字符,例如,使用 int main() { if (cin) { (...) } else { cerr << "No Data!!!" << endl; } } 操纵器std::ws将跳过前导空格。当到达非空格字符或文件结尾时,它将停止。如果到达文件结尾,std::cin.eof()将为true 总的来说,我不会费心去读

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

int main()
{
    if (cin)
    {
        (...)
    }
    else
    {
        cerr << "No Data!!!" << endl;
    }
}
操纵器
std::ws
将跳过前导空格。当到达非空格字符或文件结尾时,它将停止。如果到达文件结尾,
std::cin.eof()
将为
true

总的来说,我不会费心去读第一条。如果没有读到任何东西,失败仍然是可行的:

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

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

我不想在开始时从cin读入,因为第一个条目可能有用。可能重复的可能重复
if (!(std::cin >> std::ws).eof())
  ...
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
}