2015-04-29 51 views
2

我試圖打印輸入,直到用戶給出一個空白input.So,我用getline(cin,輸入)。但是,當我使用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

預期產出對我來說沒有意義,實際產出也是如此。我希望這個輸入沒有任何輸出。順便說一下,是否需要外部while循環來展示問題? –

+1

@UlrichEckhardt檢查編輯器格式。 OP的意圖是分開的線路。 – 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,應該給你想要的結果。