C++ 输入流 cin/ ifstream/ istringstream 及几个相关函数在遇到文件结束符EOF时的行为

本文探讨了在C++中,当输入流遇到文件结束符EOF时,cin、ifstream和istringstream的行为差异。在不同编译器如VC6.0和g++ 4.7下,流的状态处理和错误恢复方法有所不同。例如,尽管流可能显示为有效,但实际上已无法用于输入。通过使用clear()函数可以清除流的错误状态,使其再次可用。建议避免依赖特定编译器的行为,以确保代码的跨平台兼容性。
摘要由CSDN通过智能技术生成

以下内容分别在VC6.0 和 g++ 4.7下测试:

输入流在遇到文件结束符时会设置其eofbit,但此时在两个编译器上直接测试流得到的结果都为真,同时eof()也为真,举例如下:

#include <iostream>

#include <string>

#include <sstream>

using namespace std;

int main()

{

      istringstream istr("loveyou");

      string test;

      istr >> test;       //这里遇到了EOF

      if(istr.eof())

            cout << "eofbit is set" << endl;

     if(istr)

            cout << "istr is valid" << endl;

      //istr.seekg(0, istringstream::beg);

      //istr.tellp();

      if(istr.good())

            cout << "the stream can still be used" << endl;

      return 0;

}

两个编译器上运行的结果都是:

eofbit is set

istr is valid

也就是说虽然if(istr)为真,但是这时候已经不能在用istr流来输入了&#x

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值