为什么while循环永远不会评估为true?

时间:2013-09-26 18:58:46

标签: c++ cin

如果文件有坐标列表和字符:

(1,2,3,A)
// blah blah
(10,20,30,B)
(11,22,33,C)

while循环中的表达式永远不会计算为true,为什么会这样?

string str = "";
char aa, cc, ee, gg, hh, ii;
int bb, dd, ff;
while(cin >> aa >> bb >> cc >> dd >> ee >> ff >> gg >> hh >> ii ||
      cin >> str) {
    if(str != "") {
        cout << str << endl;
    }
    else {
        cout << aa << " " << bb << " " << cc << " " << dd << " " << ee << " " <<  ff << " " << gg << " " << hh << " " << ii << endl;
    }
}

1 个答案:

答案 0 :(得分:3)

一旦您的流进入失败状态,即设置了std::ios_base::failbit,在流被清除之前,流将不会执行任何操作。也就是说,如果您的第一个输入失败,第二个输入也将失败。可以解决的问题是:首先读取字符串,然后使用字符串流来查看它是否解码为成分。