I/O流使用小细节

        在使用标准库提供的I/O流时,我们常常通过判断文件流状态来进行循环控制。例如

ifstream ifStr("MyFile.txt");  // 要使用绝对路径
string str;
if(ifStr >> str){
    cout << str << endl;
}
将MyFile.txt中内容逐个单词地输出。

        但是像下面这样写就是错的:

ifstream ifStr("MyFile.txt");
// 假设MyFile.txt中内容为每行两个单词
string str1, str2;  
if(ifStr){
    ifStr >> str1;
    cout << str1 << endl;
    ifStr >> str2;
    cout << str2 << endl;
}
则MyFile.txt中内容的最后部分会重复出现。当用str1和str2保存并输出MyFile.txt中最后一行的两个单词后,下一个要输入的就是EOF了,但此时ifStr的状态依然还是正常的,只有再执行下一次输入操作的时候,ifStr的状态才会变为不可用,所以依然进入循环,但ifStr >> str1;会失败,str1中的值保持不变,str2同理。所以文件的最后一行会输出两遍。

        //xk> 小结

        在通过检查I/O流的状态来控制循环时,不是直接判断流的状态(if(ifStr){...}),而是判断流进行下一次操作之后的状态(if(ifStr >> str1){...})。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值