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


鉴于网上好多内容瞎鸡儿写,然而平时经常使用到,因此在这里做一个总结。

方式一:逐个数据读入

方式如下:

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

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

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

施工中的方式二

心情好今天下午更,心情不好嘛。。可能晚上更。。。
然后晚上也并没有更,写其他的去了。
在这里插入图片描述

  • 14
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

泠山

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值