作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个程序,用户必须在其中输入数字 1-5 进行选择。我将如何处理他们输入超出这些界限的数字甚至字符可能引起的任何错误?
编辑:对不起,我忘了说这是用 C++ 编写的
最佳答案
注意这一点。如果用户输入字母,以下将产生无限循环:
int main(int argc, char* argv[])
{
int i=0;
do {
std::cout << "Input a number, 1-5: ";
std::cin >> i;
} while (i <1 || i > 5);
return 0;
}
问题是 std::cin >> i
将不会从输入流中删除任何内容,除非它是一个数字。因此,当它循环并第二次调用 std::cin>>i
时,它会读取与之前相同的内容,并且永远不会让用户有机会输入任何有用的内容。
所以更安全的做法是先读取字符串,然后检查数字输入:
int main(int argc, char* argv[])
{
int i=0;
std::string s;
do {
std::cout << "Input a number, 1-5: ";
std::cin >> s;
i = atoi(s.c_str());
} while (i <1 || i > 5);
return 0;
}
虽然你可能想要使用比 atoi
更安全的东西。
关于c++ - 忽略要从中选择的内容之外的用户输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4975711/
这个问题在这里已经有了答案: Is a moved-from vector always empty? (4 个答案) 关闭 4 年前。 从 std::vector move 数据后,它的容量是否必
我是一名优秀的程序员,十分优秀!