码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-12-17 15:38:55      阅读:105      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!