首页 > 其他 > 详细

stringstream的状态如何影响数据交互

时间:2015-12-17 15:37:52      阅读:257      评论:0      收藏:0      [点我收藏+]

用过stringstream来给字符串赋值

但今天再用,发现和想的不一样

简单地说,stringstream罢工了

 

推敲出以下例子,以后给我乖乖工作!

#include <iostream>
#include <sstream>
#include <bitset>

using namespace std;

string getState(stringstream& ss) {
    ostringstream os;
    //显示数据和badbit、failbit、eofbit的值
    os << ss.str() << "(bfe:" << std::bitset<3>(ss.rdstate()) << ")";
    return os.str();
}

void main() {
    stringstream ss;
    string s1;

    ss.str("aa");
    cout << getState(ss) << endl; // aa(bfe:000)
    ss << "a11";
    cout << getState(ss) << endl; //a11(bfe:000) //初始值在数据流入的时候,被覆盖
    ss << " a22";
    cout << getState(ss) << endl; //a11 a22(bfe:000) //现在正常流入数据
    ss >> s1;
    cout << getState(ss) << ", " << s1 << endl;//a11 a22(bfe:000), a11
    ss << " a33";
    cout << getState(ss) << endl; //a11 a22 a33(bfe:000)
    ss >> s1;
    cout << getState(ss) << ", " << s1 << endl;//a11 a22 a33(bfe:000), a22
    ss >> s1;
    cout << getState(ss) << ", " << s1 << endl;//a11 a22 a33(bfe:001), a33 //数据全部输出,eof位变成1,罢工啦

    ss << " a44";
    cout << getState(ss) << endl;//a11 a22 a33(bfe:101) //罢工以后拒绝接收数据,bad位也是1啦

    s1 = "<none>";
    ss >> s1;
    cout << getState(ss) << ", " << s1 << endl;//a11 a22 a33(bfe:111), <none> //罢工了也不会输出数据,fail位也变成1

    ss.clear(); //重置流状态,并不会清除数据
    cout << getState(ss) << endl;//a11 a22 a33(bfe:000) //开工!

    ss << " a55";
    cout << getState(ss) << endl;//a11 a22 a33 a55(bfe:000)

    ss >> s1;
    cout << getState(ss) << ", " << s1 << endl;//a11 a22 a33 a55(bfe:001), a55 //并不会重头开始取数据

    system("pause");
}

 

stringstream的状态如何影响数据交互

原文:http://www.cnblogs.com/sqxy110/p/5054185.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!