需要您的帮助才能获得用户输入
我希望用户键入一个包含空格的字符串。
我不能使用cin>>variable
因为它们之间的空间使问题出错。
如果我使用getline(cin,string_variable)
它可以正常工作。但我需要输入两次才能使其正常工作。
cout<<"Enter movie name";
getline(cin, mvName);
getline(cin, mvName);
有没有比这更好的获取用户输入的方法,还是有任何其他代码可以输入而不是两次输入getline?请咨询。
答案 0 :(得分:6)
使用in >> value
和未格式化的输入在格式化输入之间切换时,例如,使用std::getline(in, value)
,您需要确保已经消耗了任何您不感兴趣的空格。在您的情况下,可能存在来自先前输入的缓冲区中的换行符。假设你对领导空白感兴趣,最简单的方法是使用这样的东西:
if (std::getline(std::cin >> std::ws, mvName)) {
process(mvName);
}
顺便说一下,你应该经常检查输入是否成功。
答案 1 :(得分:2)
我没有遇到任何问题:
char mvName[32];
cin.getline(mvName, 32);
我只需要打电话一次,没有任何问题。
答案 2 :(得分: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
....
答案 3 :(得分:1)
由于问题不包含新行字符,我怀疑你是否按下了"Enter movie name"
问题?这会在stdin
中添加一个空行,第一个getline()
会读取,然后第二个getline()
会读取您输入的文字。
要删除键入初始换行符的要求,只需将其添加到问题的字符串文字中:
std::cout<< "Enter movie name:\n";
答案 4 :(得分:0)
cout<<"Enter movie name";
getline(cin, mvName);
工作正常!
也许你必须两次使用getline(cin, mvName);
,因为你在第一个getline(cin, mvName);
中输入了一些字符,如Space,Enter等。