文件输入输出C++

问题描述:

在下面的代码块中,我创建了一个numbers.txt文件,它上面写有数字1,不应该将该程序吐出单词OK回无限次,因为它会通过eof标记文件输入输出C++

while (!sample.eof()) 
{ 
     char ch; 
     sample.get(ch); 
     sample.seekp(-1L, ios::cur); 
     sample >> initialnumber; 
     sample.seekp(2L, ios::cur); 
     cout << "OK"; 

} 
+0

你在哪里打开'sample'? – tadman 2014-09-12 16:22:04

+0

我已经在上面的代码中打开了它们它们没有语法错误我已经打开并关闭了文件 – 2014-09-12 16:25:18

+0

流状态是粘滞的,它只在明确请求时被清除,这就是为什么这只会在第一次达到时才会循环EOF。另一方面,我不知道我真的理解你的问题... – 2014-09-12 16:25:54

有没有这样的事,作为一个 “EOF标记物” 。 EOF仅仅是一个文件条件,通过在文件末尾处或之后定义。无论您寻求1个字节还是寻找100000个字节都没有区别:如果您的文件位置指针超过了结尾,那么您处于或超出了文件结尾。

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


在DOS时代,文件可能包含0x1A的字节(“ASCII EOF”),这将导致某些文本阅读器停在该字节。文件内容可以物理扩展到这个字节之外,但文本实用程序可能拒绝读取它。然而,标准的C++库像其他任何字符一样对待0x1A,并且会很高兴地阅读它。

+0

确定这是有道理的这是我最初虽然但我的教授和这个网站上的这个其他人完全反驳了我已读的所有内容 – 2014-09-12 16:34:32

+0

如果你的意思是乌尔里奇,他不是在试图抵触任何事情。他在谈论一个不同的问题,并且因为你的问题不清楚而感到困惑。 – nneonneo 2014-09-12 16:35:24

+0

但我做了一个不同的程序,它遵循类似的逻辑,它完全相反,这次是在无限循环中 – 2014-09-12 16:35:56