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

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

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

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

施工中的方式二

心情好今天下午更,心情不好嘛。。可能晚上更。。。
然后晚上也并没有更,写其他的去了。
C++读取txt文件内容方式_第1张图片

你可能感兴趣的:(C/C++,c++)