为什么必须两次输入getline(cin,string)?

ras*_*435 2 c++ iostream user-input

需要您的帮助来获取用户输入.
我希望用户键入一个包含空格的字符串.我无法使用,cin>>variable因为两者之间的空间使问题出错.如果我使用getline(cin,string_variable)它工作正常.但我需要输入两次才能使其正常工作.

cout<<"Enter movie name";
getline(cin, mvName);
getline(cin, mvName);
Run Code Online (Sandbox Code Playgroud)

是否有更好的方法来获取用户输入或是否有任何其他代码来键入而不是键入getline两次?请咨询.

Die*_*ühl 6

在使用in >> value和未格式化输入的格式化输入之间切换时,例如,使用std::getline(in, value)您需要确保已经消耗了您不感兴趣的任何空格.在您的情况下,缓冲区中可能存在来自先前输入的换行符.假设你对领导空白感兴趣,最简单的方法是使用这样的东西:

if (std::getline(std::cin >> std::ws, mvName)) {
    process(mvName);
}
Run Code Online (Sandbox Code Playgroud)

顺便说一句,你应该经常检查你的输入是否成功.