2013-06-20 3 views
3

Моя программа cpp делает что-то странное с областью обзора, когда я использую его строковые потоки. Когда я помещаю инициализацию строк и строковых потоков в том же блоке, что и там, где я его использую, проблем нет. Но если поместить его один блок выше, выход оленья кожа строки строка потока правильностранная область видимости в cpp

правильное поведение, программа печатает каждый маркер, разделенных пробелами:

#include <iostream> 
#include <sstream> 
#include <string> 
using namespace std; 

int main() { 

    while (true){ 
     //SAME BLOCK 
     stringstream line; 
     string commentOrLine; 
     string almostToken; 
     getline(cin,commentOrLine); 
     if (!cin.good()) { 
      break; 
     } 
     line << commentOrLine; 
     do{ 

      line >> almostToken; 
      cout << almostToken << " "; 
     } while (line); 
     cout << endl; 
    } 
    return 0; 
} 

Неправильное поведение, программа печатает только первый inputline:

#include <iostream> 
#include <sstream> 
#include <string> 
using namespace std; 

int main() { 
    //DIFFERENT BLOCK 
    stringstream line; 
    string commentOrLine; 
    string almostToken; 
    while (true){ 
     getline(cin,commentOrLine); 
     if (!cin.good()) { 
      break; 
     } 
     line << commentOrLine; 
     do{ 

      line >> almostToken; 
      cout << almostToken << " "; 
     } while (line); 
     cout << endl; 
    } 
    return 0; 
} 

Почему это происходит?

+0

Это может быть проблема с промывкой? – Nick

ответ

7

Когда вы «создаете и уничтожаете» stringstream для каждой линии, он также получает сброс состояния fail.

Вы можете исправить это, добавив line.clear(); перед тем, как добавить новый контент в line.