2

在获取用户输入方面需要您的帮助。
我希望用户键入一个包含空格的字符串。我不能使用cin>>variable之间的空间使问题出错。如果我使用getline(cin,string_variable)它可以正常工作。但我需要输入两次才能使其正常工作。

cout<<"Enter movie name";
getline(cin, mvName);
getline(cin, mvName);

有没有比这更好的方法来获取用户输入,或者是否有任何其他代码可以输入而不是输入两次 getline?请建议。

4

5 回答 5

7

在格式化输入 using 和未格式化输入之间切换时in >> value,例如, usingstd::getline(in, value)您需要确保您已使用任何您不感兴趣的空格。在您的情况下,缓冲区中可能有来自先前输入的换行符。假设您对领先的空白不感兴趣,最简单的方法是使用如下内容:

if (std::getline(std::cin >> std::ws, mvName)) {
    process(mvName);
}

顺便说一句,您应该始终检查您的输入是否成功。

于 2012-10-04T08:53:16.290 回答
2

我使用没有问题:

char mvName[32];

cin.getline(mvName, 32);

我只需要调用它一次,再次没有问题。

于 2012-10-04T08:48:17.480 回答
1

也许您只是忘记\n在提示信息中添加:

cout<<"Enter movie name:\n";

但是如果你想跳过空行 - 这样做:

// skip empty lines
while (cin >> mvName && mvName.empty());
// here mvName contains non empty string or it is empty because of error in reading
....
于 2012-10-04T08:50:14.337 回答
1

由于问题不包含换行符,我怀疑您按回车键从"Enter movie name"问题中移出?这将在 中放入一个空行stdin,第一个getline()将读取,然后第二个getline()将读取您输入的文本。

要删除输入初始换行符的要求,只需将其添加到问题的字符串文字中:

std::cout<< "Enter movie name:\n";
于 2012-10-04T08:51:05.493 回答
0
cout<<"Enter movie name";
  getline(cin, mvName);

工作正常!

也许你不得不使用getline(cin, mvName);两次是因为你在第一次输入了一些字符,getline(cin, mvName);比如 Space、Enter 等。

于 2012-10-04T09:21:43.703 回答