我从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;
}
答案 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()。