Getline无法按字母顺序工作

时间:2015-04-18 14:10:08

标签: c++ string getline

我基本上试图获取用户的名字(我希望他们能够使用空格,这就是为什么我必须使用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;

1 个答案:

答案 0 :(得分:0)

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

我仍然认为我可以告诉你代码中发生了什么。我假设您链接的代码段只是程序的一部分,在您失败的代码之前很可能是错误的。尝试将浮点数读入整数变量或类似的东西。这会导致您的信息流(在这种情况下为cin)被标记为错误。

将流标记为错误后,只会忽略以后对getline()operator>>的所有调用,直到cin.clear()已被调用以重置错误标记。

所以修复就是,找出导致你的流不好的原因。