2014-02-16 2 views
-3

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 и не устанавливает2. Спасибо за помощь.

Редактировать: Он читает getline сейчас, спасибо. Но он не вставляет значения в «строке» в строку ss string, поэтому по какой-то причине второй цикл для set2 не распознается.

+0

Что * делает * вашей программе? Где определяется 'infile'? вы открыли файл? – crockeea

+0

Да, это определено. set1 импортирует только штраф. set2 нет. –

+0

Если вы решили свою предыдущую проблему, пожалуйста, обновите код, чтобы отразить это, поскольку очень сложно вводить старый код и ссылаться на исправленное и действующее обновление без каких-либо доказательств этого. Кроме того, что такое 'set1' и' set2'? Я знаю, что они наборы, но в чем их цель? – jrd1

ответ

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.

UPDATE:

вопрос Ор различна в настоящее время по сравнению с выше.

Если, например, ваш файл данных выглядит следующим образом:

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. 
} 
+0

Спасибо за ответ, но он по-прежнему читает только одну строку. while (std :: getline (infile, line)) { while (iss >> input) { set1.insert (input); } } –

+0

@ HaakonSjøgren: Правильно: потому, что это вы сделали в своем коде. Исправьте меня, если я ошибаюсь, но ваша первоначальная проблема в том, что вы можете читать только одну строку. Теперь у вас новая проблема, связанная с другими аспектами вашего кода, которые вы не рассматривали в своем исходном сообщении. Пожалуйста, отредактируйте свой пост, чтобы это отразить. – jrd1

+0

@ HaakonSjøgren: Отредактировано. – jrd1

Смежные вопросы