2015-04-29 53 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,应该给你想要的结果。