开关不需要的输出

Unwanted output from switch

我创建了一个你需要输入数字的开关。但是我遇到了一个错误,我不知道如何修复它。

int user;
void lead() {
    cout << "1 " << flush;
    cin >> user;

    switch (user) {
    case 1:
        break;
    case 2:
        break;
    default:
        cout << user << endl;
        lead();
    }
}

当我输入字母表(如 "a")时,它会向整个控制台发送“1”和“0”。 不过我还是 C++ 的新手。

提前致谢。

这是因为输入运算符>> 看到非法输入(它需要十进制整数数字)然后停止,将非法输入留在缓冲区中并设置failbit。这意味着下次您尝试读取一个值时,输入运算符将看到与上一次调用完全相同的输入。

有几种方法可以解决这个问题:一种是从用户那里读取输入行,并以某种方式对其进行解析(例如,将行放在 std::istringstream 中并使用普通输入运算符在那上面)。

另一种解决方案是将输入流(在您的情况下为 std::cin)告知 ignore 行的其余部分。


关于一个不相关的说明:不要递归调用 default 情况下的函数。而是使用循环。