开关不需要的输出
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
情况下的函数。而是使用循环。
我创建了一个你需要输入数字的开关。但是我遇到了一个错误,我不知道如何修复它。
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
情况下的函数。而是使用循环。