Getline 无法按预期处理字符串

Getline not working as intended with strings

我基本上是在尝试获取用户名(我希望他们能够使用空格,这就是我必须使用 getline 的原因),然后是他们虚构王国的名称。但是当我 运行 这段代码时,它会自动跳过。它要求输入名称,但随后它会跳过并在允许用户输入他们的名称之前询问王国名称。我试过 cin.ignore() 但这不起作用。有人有什么建议吗?

string playerName = "nyd"; //declaring string playerName
string kingdomName = "nyd"; //declaring string countryName
int monarchAge; //declaring monarch age variable.

cout << "     Welcome, your majesty! What is your name?\n";
getline(cin,playerName);
cout << "     And what is the name of your grand kingdom, " << playerName << "?\n";
getline(cin,kingdomName);
cin.ignore();
cout << "     And finally, how old are you, Lord " << playerName << " of " << kingdomName << "?\n";
cin >> monarchAge;

您提供的代码片段实际上是正确的。我在本地编译时得到了预期的行为。

我仍然认为我可以告诉您代码中发生了什么。我假设您链接的代码片段只是您程序的一部分,在您最有可能出错的代码失败之前。类似于尝试将浮点数读入整数变量或类似变量。这将导致您的流(在本例中为 cin)被标记为不良。

一旦一个流被标记为坏的,它将简单地忽略所有未来对 getline()operator>> 的调用,直到调用 cin.clear() 来重置错误标志。

所以解决方法是,找出导致您的流变差的原因。