c++ - 为什么必须键入 getline(cin, string) 两次?

标签 c++ user-input iostream

需要您的帮助来获取用户输入。
我希望用户键入一个包含空格的字符串。 我不能使用 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);
}

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

关于c++ - 为什么必须键入 getline(cin, string) 两次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12723509/

相关文章:

Java 流操作

c++ - 如何 typedef 一个由其他元组串联而成的元组?

c++ - 为什么在从 double 转换为 float 时,支撑初始化不会引发缩小错误?

c++ - basic_filebuf::underflow 错误读取文件与 ifstream on/proc/pid/stat

java - 空字符 (\u0000) 如何在字符串中结束?

iphone - 将 iOS 应用程序提交到通过 wifi 与第三方硬件交互的苹果商店

c++ - HashMap - 插入类型错误

java - 在扫描仪验证中将 Enter 键视为无效

c++ - 二维数组中的用户输入 (C++)

c++ - 从 cin 获取 C++ 结构中多个枚举的输入