c ++ eof和空行混淆

时间:2014-04-13 09:20:53

标签: c++ eof

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;
}

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

你是什么意思&#34;空行&#34;?该行是否没有任何字符,或者它最后是否有换行符?如果该行真的为空std::getline(),则会读取EOF并在std::ios_base::eofbit的流状态中设置std::cin。如果最后有换行符,它会到达输入的结尾,但已设置eofbit