c++ good eof getline


当使用fstream读取文件信息,通过good或者eof来处理文件中的行时,会出现多读一行的情况,如下面代码:


fstream myfile;
string line;
myfile.open("test.in",iso:in);
if (myfile.is_open()) {
    while (myfile.eof()) {
        getline(myfile.line)
        cout<<line<<endl;
    }
}
本来在读到文件尾部时应该停下来,但是while循环会在之后再次执行一次。


但是把以上改为:

fstream myfile;
string line;
myfile.open("test.in",iso:in);
if (myfile.is_open()) {
    while (true) {
        getline(myfile.line)
        if (myfile.eof()) {
            break;
        }
        cout<<line<<endl;
    }
}

文件读完最后一行后,当时位置只在最后一行文本,并不是eof,当getline在读一次,则什么也读不到,即是空。这个时候myfile.eof()返回true。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值