c++eof和空行混淆

c++ eof and empty line confusion

本文关键字:c++eof      更新时间:2023-10-16
string line;
getline (cin, line);
if(line.empty() && !cin.eof()) continue;
if (cin.eof()) {
    if (need_echo) cout << "^D";
    cout << endl;
    DEBUGF ('y', "EOF");
    break;
}

为什么getline(cin, line)扫描空行时cin.eof为false?

因为EOF(文件结尾(与行尾不同。你可以有一个充满空行的文件,例如:只需写很多行尾字符。

"空行"是什么意思?这行是没有任何字符,还是结尾有换行符?如果该行真的是空的,std::getline()将读取EOF并将std::ios_base::eofbit设置为std::cin的流状态。如果末尾有一个换行符,它就会到达输入的末尾,但它不会设置eofbit