eof

#include <fstream>
int main()
{
     char c = 0;
     std::ifstream file("test.txt");
     if (!file){
         std::cout << "error"<<std::endl;
         return 1;
     }
     while (!file.eof()){
         file.get(c);
         std::cout << c ;
     }
     system("pause");
     return 0;
}

       如果test.txt的内容是:123456,那么输出的结果将会是:1234566。
       如果数据:123456 后面还有一个空行,就不会显示重复(也许重复了一个空行,但是我们看不到)。

       后来通过 Google ,发现 eof() 返回true的条件是“读到文件结束符”,而不是文件内容的最后一个字符。
       要清楚“文件结束符”(0xff),就是说我们文件最后的字符不是文件结束符,而最后的字符的下一位才是。所以操作再读多一次。在一些编译器中(dev c++),它读到最后一个字符后文件位置的指针会定在那儿,所以就会重复最后一个字符。  


#include <fstream>
int main()
{
     char c = 0;
     std::ifstream file("test.txt");
     if (!file){
         std::cout << "error"<<std::endl;
         return 1;
     }
     while (file.peek() != EOF){   // 修改了这里,判断条件为:file.peek() != EOF
         file.get(c);
         std::cout << c ;
     }
     system("pause");
     return 0;
}


       peek()是取文件当前指针,EOF是文件尾标符,它的值为-1,所以采用这种方法就解决上面eof()的问题了。这种方法也可以用在读写二进制文件中。

来自: http://hi.baidu.com/maxiao19880601/blog/item/fb5fb7d331dda70d3bf3cfe0.html
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值