getline(cin.name)被跳过

时间:2011-11-23 02:28:44

标签: c++ function input

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

3 个答案:

答案 0 :(得分:6)

确保自上次从cin读取内容后没有遗留,例如:
在您的计划的早期阶段:

int number;
cin >> number;

您提供的输入:

5

该计划的后期:

getline(cin,name);

getline似乎没有被调用,而是从上次输入时收集了换行符,因为当你使用cin >>时它会留下新行。

答案 1 :(得分:2)

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

检查您期望的输入。

答案 2 :(得分:2)

你有吗: cin&lt;&lt; variableName;

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

cin&lt;&lt; intvariable 后续getline(cin,variable)

这是因为cin流对象拥有输入缓冲区。当你输入换行符时,我假设它从流转到变量asisgnment的流中被删除,但仍然包含在cin对象实例本身中。

我使用的一种解决方法是 cin.ignore();在 cin&lt;&lt;整数语句。

另一位用户提到将getline中的所有输入解析为整数,浮点数 - 而不是根啤酒 - 和字符串。祝你好运,并检查你的代码是否使用cin&amp; amp;函数getline()。