【问题标题】:getline(cin.name) gets skippedgetline(cin.name) 被跳过
【发布时间】:2012-01-04 10:01:37
【问题描述】:

我从 C++ 中的一个函数调用一个函数,该函数具有 getline(cin,name) 行,其中 name 是一个字符串。第一次通过循环,程序不等待输入。它将在所有其他通道上通过循环。关于为什么的任何想法?

void getName (string& name)
{ 
     int nameLen; 
      do{
          cout << "Enter the last Name of the resident." << endl << endl
              << "There should not be any spaces and no more than 15"
              << " characters in the name."  << endl;



         getline(cin,name);
            cout << endl;
            nameLen = name.length();// set len to number of characters input

         cout << "last" << name << endl;
         }
      while (nameLen < LastNameLength);   
      return;
}

【问题讨论】:

  • 可能在调用函数之前还有一些数据等待从stdin读取。
  • 请提供一个小而完整的程序来演示这个问题。您描述的问题可能是由您没有向我们展示的某些代码引起的。
  • 离题:当你的意思是'\n'时,请不要使用endlendl 刷新不必要的低效输出流。
  • @Rob 除非您在可能发生崩溃时打印调试语句。

标签: c++ function input


【解决方案1】:

可能是输入流的原因。 getline 函数在接收到第一个换行符后停止读取输入。例如,如果 std::cin 的缓冲区中有多个换行符 - getline 将在每次遇到一个时返回。

检查您期望的输入。

【讨论】:

    【解决方案2】:

    确保自上次从 cin 读取内容后没有剩余内容,例如:
    在您的程序的前一点:

    int number;
    cin >> number;
    

    你给出的输入:

    5
    

    节目后期:

    getline(cin,name);
    

    getline 似乎不会被调用,而是从您上次输入时收集换行符,因为当您使用 cin &gt;&gt; 时,它会留下新行。

    【讨论】:

    • 感谢您的建议。我在 getline 之前添加了一行 cin.ignore('\n') 。上一个函数中有cin语句。这解决了问题
    【解决方案3】:

    你有没有: cin

    代码行?我在使用时遇到了 getline() 跳过运行时错误:

    cin 和 随后是 getline(cin, variable)

    这是因为 cin 流对象拥有一个输入缓冲区。当您输入换行符时,我假设它从流到变量分配的流中被截断,但仍包含在 cin 对象实例本身中。

    我使用的一种解决方法是 cin.ignore();在 cin 语句之后。

    另一位用户提到将来自 getline 的所有输入解析为整数、浮点数(不是根啤酒)和字符串。祝你好运,检查你的代码是否有双重使用 cin 和 getline()。

    【讨论】:

      猜你喜欢
      • 2014-09-24
      • 1970-01-01
      • 1970-01-01
      • 2021-11-24
      • 1970-01-01
      • 1970-01-01
      • 2015-11-04
      • 2021-11-26
      相关资源
      最近更新 更多