C++ 忽略除';从中选出

C++ 忽略除';从中选出,c++,validation,exception-handling,input,C++,Validation,Exception Handling,Input,我有一个程序,用户必须通过输入数字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

我有一个程序,用户必须通过输入数字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;
}

不过,您可能想使用比atoi更安全的东西。

嗯,什么编程语言?对不起,我漏掉了这一部分。C++是语言,它会做到这一点…谢谢我将删除我的答案。将该atoi包装成try/catch如何?@SteveSudit:
atoi()
不能(不应该)抛出异常,因为它是一个C运行时函数。假设这是std::atoi()<代码>atoi在非数字字符串的情况下不起任何作用。改用类似于strtoul的方法。您应该检查提取操作符是否也失败。如果希望看到无限循环,请输入一次EOF(在UN*X上输入Ctrl+D,在Windows上输入Ctrl+Z)。
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;
}