为什么必须键入 getline(cin,字符串)两次
Why must type getline(cin, string) twice?
需要您帮助获取用户输入。
我希望用户键入一个包含空格的字符串。我不能使用cin>>variable
因为中间的空间会使问题出错。如果我使用getline(cin,string_variable)
它可以正常工作。但是我需要输入两次才能使其正常工作。
cout<<"Enter movie name";
getline(cin, mvName);
getline(cin, mvName);
有没有比这更好的方法来获取用户输入,或者是否有任何其他代码可以键入而不是键入两次 getline?请指教。
在使用in >> value
的格式化输入和未格式化输入之间切换时,例如,使用std::getline(in, value)
您需要确保已使用任何您不感兴趣的空格。在您的情况下,缓冲区中可能有来自先前输入的换行符。假设你对引导空格感兴趣,最简单的方法是使用这样的东西:
if (std::getline(std::cin >> std::ws, mvName)) {
process(mvName);
}
顺便说一句,您应该始终检查您的输入是否成功。
我在使用时没有问题:
char mvName[32];
cin.getline(mvName, 32);
我只需要打电话一次,再次没有任何问题。
也许您只是忘记在提示消息中添加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
....
由于问题不包含换行符,我怀疑您按回车键从"Enter movie name"
问题向下移动?这会在stdin
中放置一个空行,第一个getline()
将读取,然后第二个getline()
将读取您输入的文本。
要删除键入初始换行符的要求,只需将其添加到问题的字符串文字中:
std::cout<< "Enter movie name:n";
cout<<"Enter movie name";
getline(cin, mvName);
工作正常!
也许您必须使用两次getline(cin, mvName);
是因为您在第一个getline(cin, mvName);
中输入了一些字符,例如空格,Enter等。
相关文章:
- 在while循环中输入带有std::cin的字符串后,控制台会输出大量胡言乱语
- 由cin中的字符串中未捕获空白引起的分割错误
- cin >> int 给定一个字符串将 int 赋值为 0
- 从 cin 读取不会返回整个输入字符串
- 而循环跳过 cin.getline() 对于 C 字符串
- 使用 getline(cin, var) 两次在进行字符串比较时会产生错误 (==)
- C++程序在将 int 与 cin 一起使用时有效,但不能使用字符串
- 有没有办法让C++从 cin 中接收不确定数量的字符串?
- 在循环中使用 cin.get() 输入字符串
- 为什么 cin 在包含字符串标头后接受字符串输入
- 使用分配构造字符串时是否可以使用 cin?
- cin>>gender 和 cin>>*gender ( c 样式文本字符串)有什么区别
- CIN 标准::带空格的字符串
- 如何将字符输入限制为仅获取一个字符串"cin"
- C++:在 cin 重载中拼接字符串
- STD :: cin和Scanf()应用于字符串之间的区别
- 如何在CIN中以C 的CIN中的所有读取为字符串
- 将字符串从BASH脚本(C 程序)推入CIN
- cin字符串转换为Vector(c++)
- cin字符串到一个向量中,并对它们进行快速排序