【问题标题】:Input using getline(cin,n); is not printing first input and i am not using cin>> to take input anywhere使用 getline(cin,n) 输入;没有打印第一个输入,我没有使用 cin>> 在任何地方输入
【发布时间】:2015-07-08 06:02:10
【问题描述】:

我正在尝试打印输入,直到用户提供空白输入。所以,我使用了 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  

【问题讨论】:

  • 可能连续的getline 调用(循环之前的一个,while 表达式中的一个)与第一次读取消失有关。为什么你认为你根本需要裸电话? (或嵌套循环,就此而言)。
  • 预期输出对我来说没有意义,实际输出也是如此。我希望该输入根本没有输出。顺便说一句,证明问题是否需要外部 while 循环?
  • @UlrichEckhardt 检查编辑器内格式。 OP 打算将它们放在不同的行上。
  • 是的,@WhozCraig,这解释了很多。为了便于阅读,我冒昧地稍微编辑了一下……

标签: c++ iostream cin getline


【解决方案1】:

您的代码询问了两次:

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;
}

【讨论】:

    【解决方案2】:

    问题是

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

    第一个getline 读取输入(第一行),但您丢弃并再次读取

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-05
      相关资源
      最近更新 更多