开关的不需要的输出

时间:2015-09-18 11:46:02

标签: c++ switch-statement

我创建了一个需要输入数字的开关。但是我发现了一个我不知道如何修复的错误。

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 ++的新手。

提前致谢。

1 个答案:

答案 0 :(得分:1)

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

有几种方法可以解决这个问题:一种方法是读取用户的输入行,并以某种方式解析它(例如将行放在std::istringstream中并使用正常的输入操作符)。

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

在一个不相关的说明中:不要在default案例中递归调用该函数。而是使用循环。