137 字
1 分钟
cse-lab2a踩坑
  1. ifstream::eof()有bug。

    如果有一个文件test.txt,文件内容是:

    1 a
    2 ab
    3 abc

    (注意,最后有一个空行)

    则,当时用下面的代码时,会有问题。

    int main() {
    ifstream in("test.txt");
    while (!in.eof()) {
    int length;
    in >> length;
    char tmp[length + 1];
    in.read(tmp, length);
    cout << tmp << endl;
    }
    }

    原因在于,第三行读取完成后,不管是否将最后的换行符进行了消除,eof()会仍然返回false,因为只有当读到最后一个字符并尝试继续读的时候,该函数才会返回true。

cse-lab2a踩坑
https://lulu010722.com/posts/cse-lab2a/
作者
LULU
发布于
2022-10-29
许可协议
CC BY-NC-SA 4.0