我需要对C ++中的eof()文件流函数进行一些说明。在我的教科书中,它说“ inStream.eof()直到程序尝试读取文件末尾的一个字符后才变为true。”如果inStream是ifstream对象。但是,当我编写一个从文件中读取整数的程序时,假设我的ifstream对象称为“ fin”,那么当我读取最后一个整数时,便会设置fin.eof()。因此,如果我有一些迷你程序可以简单地从一个文件中读取整数并将其打印到另一个文件中:
ifstream fin("input.txt");
ofstream fout("output.txt");
int num;
fin >> num;
while (!fin.eof()) {
fout << num << endl;
fin >> num;
}
假设我的输入文件是
9
10
11
然后我的输出将是
9
10
通过调试,我发现由于某些原因,当“ fin >> num”读取最后一个数字时,它将设置eof标志,因此while循环中的条件计算为false并中断。这与我的教科书所说的相反,我只是感到困惑。如果依赖于编译器,那么我正在使用Visual Studio 2019,所以也许就是问题所在。否则,我不确定,因为我的课本说的是一件事,而程序中正在发生另一件事。
在我脑海中,唯一能想到的就是我的教科书在读取字符方面对eof()进行了解释,现在我正在从文件中读取整数,所以也许有所不同。