C++读取txt文件内容方式

    技术2026-01-09  12

    C++读取txt文件内容方式

    方式一:逐个数据读入方法一方法二方法三:使用peek函数 施工中的方式二 鉴于网上好多内容瞎鸡儿写,然而平时经常使用到,因此在这里做一个总结。

    方式一:逐个数据读入

    方式如下:

    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。 可替代的方法有以下几个:

    方法一

    while( !infile.eof() ) { infile >> data; if( infile.good() { cout << data ; } }

    辣鸡方法无误,一般情况下,我需要的是数据的导入,而非数据的显示。在数据导入后,再对输出做判断无疑没啥子用。

    方法二

    while(infile >> data) { cout << data; }

    亲测可用,但有个问题在于,处理诸如infile >> data1 >> data2 >> data3这种类型,就不太适用了。

    方法三:使用peek函数

    while(infile.peek()!=EOF) { infile >> data; cout << data; }

    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; }

    同样会多读一次。讲道理,在使用这个函数的时候,最后没有空格,也完全不好使,后面有机会我再尝试下

    综上,只有方法二比较靠谱:)

    施工中的方式二

    心情好今天下午更,心情不好嘛。。可能晚上更。。。 然后晚上也并没有更,写其他的去了。

    Processed: 0.021, SQL: 10