注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

TOTO

Think and Be Different

 
 
 

日志

 
 

in.eof()

2006-10-19 16:23:11|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
已经读到文件末尾了,我当时只是想测试一下文件的末尾是不是已经到了, 
    if(in.eof())              // Why in.eof() is not null????[]
        cout << "Loading OK" << endl;
然后我发现并不执行这条语句,当时很疑惑.
其实in现在的指针还是在还在最后一个字符,并没有移动eof上面,所以必须在多读入一个字符,这个时候就行得通了
    char ch;                  //let in read in the last end char
    in >> ch;
    if(in.eof())              //
        cout << "Loading OK" << endl;
可以测试一下
[附另一个人写的关于这个问题的]

c++ 文件 eof

 while (!file.eof()){
  file >> cha;
  cout << cha << endl;
 }
此段代码会把最后一个字符重复输出
以前我总怀疑是不是那个eof()在设计上有点缺陷
今天调试了一下,发现:
当读取了文件的最后字符,eof仍然为false.
最后字符的后面还有个<eof>标志,
当再次读取,也就是读取文件里的<eof>标志,eof()这才为true
而且,这时的 file >> cha 调用是不成功的,也就是说,cha保持原有的数值.
上面代码中的file.eof()判断的是上一个循环里面的file>>cha调用的情况
这就提示我们想到:
当输出最后一个字符后,重新进入循环,判断的是
输出了最后字符后的条件,根据上面的分析,file.eof()仍然为false,所有进入循环
但是这个时候的的file>>cha调用不成功,cha保持原有的字符,所以再一次输出最后字符.
接着又重新进入循环,eof()为true,跳出.OK!结束
正确代码如下
file >> cha; 
while (!file.eof()){
  cout << cha << endl;
  file >> cha;

}


  评论这张
 
阅读(637)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017