2010-11-20 166 views
2

是否有一个while循环允许我将stringstream的所有值输入到某种数据类型中?例如:从字符串流中输入值

stringstream line; 
while(/*there's still stuff in line*/) 
{ 
    string thing; 
    line >> thing; 
    //do stuff with thing 
} 

回答

2

是:

std::stringstream line; 
std::string thing; 
while (line >> thing) 
{ 
    // do stuff with thing 
} 

if (line.fail()) 
{ 
    // an error occurred; handle it as appropriate 
} 

流操作(如>>)返回流;这是什么让你连锁流操作,如:

line >> x >> y >> z 

一个流可以用作布尔;如果数据流处于良好状态(也就是说,如果数据可以从中读取),则其评估为true;否则它评估为false。这就是为什么我们可以使用流作为循环中的条件。

流有多种原因不会处于良好状态。

其中之一是当你到达流的末尾(由测试line.eof()指示);显然,如果你想从流中读取所有的数据,这是你期望流完成后的状态。

流不会处于良好状态的另外两个原因是,如果某些内部错误或流上的操作失败(例如,如果尝试提取整数但流中的下一个数据不是代表一个整数)。这两项都通过line.fail()进行测试。

+0

打我吧,我还在打字! (string thing; line >> thing;){use(thing);'+ 1' – sbi 2010-11-20 21:44:23

+0

' }'如果条件在我们的循环中失败了,line.fail()将是true;你将不得不打破循环,以保持流畅。小心使用好(这就是为什么我认为),因为!stream.fail()与stream.good()不相同。 – 2010-11-20 22:06:33