getline函数在do-while循环的第一次迭代中工作,并且允许用户输入其名称并输出该名称。当用户输入“ y”时,do while循环再次运行,但不允许用户输入其名称,它只是跳过getline函数,就好像它不在那里一样。我使用getline函数而不是cin,因为用户必须输入包括空格(空白字符)的全名。
我已经将userName的初始化语句移入了循环,但这没有帮助。
#include <iostream>
using namespace std;
int main() {
string userName = "";
char response;
do
{
cout << "Enter a name: ";
getline(cin, userName);
cout << userName << endl;
cout << "You wanna carry on? ";
cin >> response;
cin.ignore(1, '\n');
}while(response == 'y');
return 0;
}
我希望此代码允许用户在do-while循环的每次迭代中使用空格输入其名称。
解决方案 我遇到的解决方案是,我在do-while循环结束之前添加了cin.ignore(1,'\ n')。这将忽略getline函数添加到字符串中的换行符。