在下面的代码块中,我创建了一个number.txt文档,其上写有数字1,该程序不应该将这个单词OK无限次地吐出来,因为它已超过eof标记
while (!sample.eof())
{
char ch;
sample.get(ch);
sample.seekp(-1L, ios::cur);
sample >> initialnumber;
sample.seekp(2L, ios::cur);
cout << "OK";
}
答案 0 :(得分:0)
没有“EOF标记” 1 这样的东西。 EOF只是一个文件条件,它定义在文件末尾或过去。无论您是寻找1个字节还是寻找超过结尾的100000个字节都没有区别:如果您的文件位置指针超过了结尾,则您处于或超出文件结束。
您的代码读取一个字符然后备份(基本上否定了字符读取)。然后它读取一个整数并跳过两个字符。这具有始终在文件中前进的效果(即使整数读取失败)。因此,你最终会击中EOF:这里没有无限循环。
1 在DOS时间,文件可能包含0x1A字节(“ASCII EOF”),这会导致某些文本阅读器在该字节处停止。文件内容可能在物理上超出此字节,但文本实用程序可能拒绝读取它。但是,标准的C ++库像任何其他字符一样对待0x1A,并且很乐意读过它。