今天遇到了一个关于文件读写的问题,觉得很奇怪。
我将问题简化了下,写了个小程序,源代码如下:
文件“1.txt”里的内容是:3x2+6x8#
运行程序,输出的结果如下:
按我们一般的想法,应该最后只输出一个#,可是输出了两个,这是为什么呢?
我后来上网搜索了一下,有这样一个解释,我觉得有点道理:
事实上,文件本身是没有文件结束符EOF的。当读取文件中最后一个有效字符后,虽然文件指针已指向空白了,但这时还不知道是否到了文件末尾,只有再读取一次文件,待读不到任何内容了,这时输入流设置eofbit位,eof的返回值才为l,而空的内容是不会被提取到变量的,故最后一次读到变量中的内容又被重复输出了。
我再找找看看关于eof()函数的源文件,看有没有更好的解释。
2011-03-18 16:47:33