【发布时间】:2011-06-25 22:22:14
【问题描述】:
我有一个程序,用户必须通过输入数字 1-5 进行选择。我将如何处理可能因他们输入超出这些范围的数字甚至字符而产生的任何错误?
编辑:对不起,我忘了提到这是在 C++ 中
【问题讨论】:
-
嗯,什么编程语言?
-
抱歉,我漏掉了那部分。 C++ 是语言。
标签: c++ validation exception-handling input
我有一个程序,用户必须通过输入数字 1-5 进行选择。我将如何处理可能因他们输入超出这些范围的数字甚至字符而产生的任何错误?
编辑:对不起,我忘了提到这是在 C++ 中
【问题讨论】:
标签: c++ validation exception-handling input
对此要小心。如果用户输入一个字母,以下将产生一个无限循环:
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 更安全的东西。
【讨论】:
atoi() 不能(不应该)抛出异常,因为它是一个 C 运行时函数。假设无论如何这是std::atoi()。 atoi 在非数字字符串的情况下不会做任何有用的事情。请改用strtoul 之类的东西。