文件输入输出c ++

时间:2014-09-12 16:20:41

标签: c++

在下面的代码块中,我创建了一个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";

}

1 个答案:

答案 0 :(得分:0)

没有“EOF标记” 1 这样的东西。 EOF只是一个文件条件,它定义在文件末尾或过去。无论您是寻找1个字节还是寻找超过结尾的100000个字节都没有区别:如果您的文件位置指针超过了结尾,则您处于或超出文件结束。

您的代码读取一个字符然后备份(基本上否定了字符读取)。然后它读取一个整数并跳过两个字符。这具有始终在文件中前进的效果(即使整数读取失败)。因此,你最终会击中EOF:这里没有无限循环。


1 在DOS时间,文件可能包含0x1A字节(“ASCII EOF”),这会导致某些文本阅读器在该字节处停止。文件内容可能在物理上超出此字节,但文本实用程序可能拒绝读取它。但是,标准的C ++库像任何其他字符一样对待0x1A,并且很乐意读过它。