我创建了一个需要输入数字的开关。但是我发现了一个我不知道如何修复的错误。
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 ++的新手。
提前致谢。
答案 0 :(得分:1)
因为输入操作符>>
看到非法输入(它需要十进制整数位)然后停止,将非法输入留在缓冲区中并设置failbit
。这意味着下次您尝试读取值时,输入操作符将看到与前一次调用完全相同的输入。
有几种方法可以解决这个问题:一种方法是读取用户的输入行,并以某种方式解析它(例如将行放在std::istringstream
中并使用正常的输入操作符)。
另一个解决方案是将输入流(在您的情况下为std::cin
)告诉ignore
该行的其余部分。
在一个不相关的说明中:不要在default
案例中递归调用该函数。而是使用循环。