方式如下:
int main() { char data; ifstream infile; infile.open("in.txt"); //程序打开 while( !infile.eof() ) //判断是否结束 { infile >> data; cout << data ; } infile.close(); return 0; }eof是end of file的意思,用来判断是否到了文件结尾。
问题来了,你以为这样就可以了?naive 当文件此时的输入内容为:abc时, 输出结果可能为abcc。 明明使用了eof()判断,为什么会跟实际得到的不一样呢?
按照一般思维,到达了文件尾,eof()应该返回true,但事实上,在读完最后一个数据时eofbit仍然是false。只有当流再往下读取时,发现文件已经到结尾了,才会将标志eofbit修改为true。换句话说,只有等下次调用eof()时,才会返回true。 可替代的方法有以下几个:
辣鸡方法无误,一般情况下,我需要的是数据的导入,而非数据的显示。在数据导入后,再对输出做判断无疑没啥子用。
亲测可用,但有个问题在于,处理诸如infile >> data1 >> data2 >> data3这种类型,就不太适用了。
peek()只是查看缓冲的下一个元素,并不读取,也就是说,文件内部指针不会向后移动。C++中的描述为:
Returns the next character to be read from the stream without extracting it.可以看出peek有一个局限,只能在读取char类型时使用。例如,in.txt内容为以空格隔开的字符串,因为我们在程序中写入文件时,每写入一个字符串之后跟一个空格,所以最后一个字符串之后有空格:
string str; while(infile.peek()!=EOF) { infile >> str; cout << str << endl; }同样会多读一次。讲道理,在使用这个函数的时候,最后没有空格,也完全不好使,后面有机会我再尝试下。
综上,只有方法二比较靠谱:)
心情好今天下午更,心情不好嘛。。可能晚上更。。。 然后晚上也并没有更,写其他的去了。
