2015-04-29 1 views
2

Я пытаюсь печатать входы до тех пор, пока пользователь не даст пустой ввод. Так, я использовал getline (cin, input). Но, когда я использую getline (cin, input). Он пропускает первый вход, выдавая результат.Вход с использованием getline (cin, n); не печатает первый вход, и я не использую cin >> для ввода ввода в любом месте

#include <iostream> 
using namespace std; 
int main() { 
    while(1) 
    { 
     string n; 
     getline(cin, n); 
     while(getline(cin,n) && !n.empty()) 
     { 
      cout<<n<<endl;; 
     } 
     if(n.empty()) 
      break; 
    } 
    return 0; 
} 

ввода образца:

12 
2 

выход получен: требуется

2 

выход:

12 
2 
+4

Возможно, последовательные вызовы 'getline' (один перед циклом, один в выражении while) имеет какое-то отношение к первому чтению, исчезающему. Почему, по-вашему, вам нужен голый звонок? (или вложенные петли, если на то пошло). – WhozCraig

+1

Ожидаемый результат не имеет смысла для меня, как и фактический вывод. Я бы не ожидал вывода для этого ввода. BTW, это внешний замкнутый цикл, необходимый для демонстрации проблемы? –

+1

@UlrichEckhardt проверить формат in-editor. ОП предназначались для отдельных линий. – WhozCraig

ответ

0

Ваш код задает строку дважды:

1) перед вложенным циклом

getline(cin, n); 

2) в состоянии вложенного цикла

while(getline(cin,n) && !n.empty()) 

Мое предложение заключается в упрощении программы следующим образом:

#include <iostream> 
#include <string> 
using namespace std; 
int main() { 
    while(1) // only one loop is needed 
    { 
     string n; 
     getline(cin, n); // read line 
     if(n.empty())  // check line 
      break;   // stop loop 
     else 
     { 
      cout << n << endl; // print line 
     } 
    } 
    return 0; 
} 

или оставить только вложенные петля без while(1), например:

#include <iostream> 
#include <string> 
using namespace std; 
int main() { 
    string n; 

    while(getline(cin,n) && !n.empty()) 
    { 
     cout<<n<<endl; 
    } 

    return 0; 
} 
0

Проблема заключается в том

getline(cin, n);       // here 
    while(getline(cin,n) && !n.empty()) 

Это первый getline читает ввод (первая линия), но отбрасывать и читать снова в вашем

while(getline(cin,n) && !n.empty()) 

Таким образом, удалить, что первый getline, который должен дать вы желаемый результат.