C++ fstream读取文件,最后一个字符被读取两遍的原因
参考了http://blog.csdn.net/candyliuxj/article/details/6259477
今天遇到了一个关于文件读写的问题,觉得很奇怪。
将问题简化了下,写了个小程序,源代码如下:
fstream fin("/home/hero/HeroProgram/sort",ios::in); int n = 0; while(!fin.eof()) { fin>>n; cout<<n<<“ ,”; } fin.close();
sort里放了两个整数,1296 1888,结果cout的输出结果却是:1296,1888,1888
预期结果应该最后只输出一个1888,可是输出了两个,这是为什么呢?
我后来上网搜索了一下,有这样一个解释,我觉得有点道理:
事实上,文件本身是没有文件结束符EOF的。当读取文件中最后一个有效字符后,虽然文件指针已指向空白了,但这时还不知道是否到了文件末 尾,只有再读取一次文件,待读不到任何内容了,这时输入流设置eofbit位,eof的返回值才为l,而空的内容是不会被提取到变量的,故最后一次读到变 量中的内容又被重复输出了。
大家可以再找找看看关于eof()函数的源文件,看有没有更好的解释。
可以这样修改达到我们预期的效果:
fstream fin("/home/hero/HeroProgram/nosort",ios::in); int n = 0; fin>>n; while(!fin.eof()) { cout<<n<<“,”; fin>>n; } fin.close();
经过这样修改后,输出了预期的结果:1296,1888.
posted on 2013-08-26 19:52 chenyingjie2012 阅读(1019) 评论(1) 收藏 举报
浙公网安备 33010602011771号