C++ 为什么这行得通

标签 c++ visual-studio visual-c++ switch-statement

我正在使用 Microsoft Visual Studio 2013

我目前有这个 switch 语句:

switch (option)
{
        case 1:
            getline(cin, newname);
            cout << "What would you like your new username to be?\nName: ";
            getline(cin, newname);
            name = newname;
            cout << "\nYour username is now '" << name << "' with your balance being $" << balance << "\n";
            options();
            break;
        case 2:
            cout << "\nOpenning cheat menu\n";
            cheats();
            break;
        default:
            cout << "\nExitting to main title...\n";
            title();
            break;
}

您可以忽略案例 2 和默认情况,只是显示以便您知道这些案例有效。情况 2 和默认情况下工作得很好,但情况 1 表现得很奇怪。正如您在案例 1 中看到的,我有两个 getline(cin, newname);您可能认为我应该只有一个,但出于某种原因我需要两个才能使此代码正常运行。

如果我只有其中之一,代码会跳过用户应该提供的输入。如果我有两个,它会正常工作。

我问过别人这个,他们也不明白,所以因此:为什么这行得通。

最佳答案

显然,您在 cin输入缓冲区 中有包括换行符在内的剩余输入。当您使用 getline 以外的其他输入操作时,就会发生这种情况。它们通常不会消耗输入缓冲区中的所有内容。

除了额外的 getline,您可以使用 ignore,但更好的是,在您之前输入的地方执行此操作。

关于C++ 为什么这行得通,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30879850/

相关文章:

c - 使 Visual Studio 项目文件与目录内容保持同步?

c++ - 带有字符串变量指令的 C/C++ 内联汇编程序

c++ - 链接器如何找到正确的库?

c++ - 使用 rxcpp 对聚合函数进行分组?

visual-studio - 运行 Visual Studio 时的崩溃堆栈跟踪是什么?

.net - 在 VS2010 中编译旧版本的 .net

c++ - 如何通过重载 << 运算符打印出 vector 中的对象?

c++ - 在C++容器中作为模板参数提供的分配器与作为构造函数参数提供的分配器之间的区别?

c++ - 哪些 C++ 随机数引擎具有 O(1) 丢弃函数?

c++ - 规范化 vector 时浮点精度异常低