while循环中无法识别Stringstream

时间:2014-02-16 05:26:37

标签: c++ file getline stringstream file-io

Set2 while循环由于某种原因没有填充。 Set1工作正常。

std::stringstream ss;
std::string line;
std::getline(infile, line);
ss.str(line);
int input;

// Populate set1
while(ss >> input)
{
    set1.insert(input);
    std::cout << "Populate set1 with " << input << "\t pos is " << set1.getUsed() << std::endl;
}

// Populate set2
std::getline(infile, line);
ss.str(line);

std::cout << "\n2nd getline verification: " << line << std::endl;

while (ss >> input)
{
    set2.insert(input);
    std::cout << "Populate set2 with " << input << "\t pos is " << set2.getUsed() << std::endl;
}

它只填充set1而不是set2。谢谢你的帮助。

编辑:它现在读取getline,谢谢。但它没有将“line”中的值输入到ss stringstream中,因此由于某种原因,set2的第二个循环无法识别。

1 个答案:

答案 0 :(得分:2)

这并不奇怪,因为你只读了一行 - 你根本没有循环播放。你的代码应该是:

std::string line
while(std::getline(infile, line)) {
    std::cout << line << std::endl;//see what's in the line
    //other code here...
}

为什么呢?因为你想继续从流中读取(直到遇到EOF)。换句话说:您希望继续从流中读取内容,而则可以从流infile 中获取一行数据。

更新:

OP的问题现在与上述问题不同。

例如,如果您的数据文件如下所示:

123 2978 09809 908098 
198 8796 89791 128797

你可以阅读这样的数字:

std::string line
while(std::getline(infile, line)) {
    //you line is populated
    istringstream iss(line);
    int num;

    while (!(iss >> num).fail()) {
        //save the number
    }
    //at this point you've reached the end of one line.
}