使用getline输入(cin,n);没有打印第一个输入,我没有使用cin>>在任何地方输入

时间:2015-04-29 05:57:37

标签: c++ iostream cin getline

我正在尝试打印输入,直到用户输入空白。所以,我使用了getline(cin,input)。但是,当我使用getline(cin,input)时。它在输出时跳过第一个输入。

#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  

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:0)

问题是

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

第一个getline读取输入(第一行),但您在

中丢弃并再次阅读
while(getline(cin,n) && !n.empty())

所以,删除第一个getline,这应该会给你想要的结果。