初学者如何处理因用户输入错误类型而导致的异常

时间:2012-03-21 06:40:17

标签: c++ exception-handling

这篇文章可能与c ++中关于例外的常见问题有点不同。

在C ++中,有人如何处理用户输入错误,具体来说,我的意思是当提示用户输入整数并输入浮点数或字符串/ char时,反之亦然。你知道有人在被提示他们的年龄时输入他们的名字。

我基本上是在谈论C ++中的内容与Python中的内容相同:

try:
[code to prompting user for an integer.]
exception ValueError:
[code to run if exception is thrown.]

如果你们中的一个人有空闲的时间以一种初学者能够理解的方式向我解释这将是非常赞赏的人。

感谢。

4 个答案:

答案 0 :(得分:4)

try catch的基本示例是这样的:

try
{
    // code that throws an exception
}
catch(...)
{
    // exception handling
}

请注意,这三个点对于捕获所有异常非常有效,但您不知道"什么"你抓住了这就是为什么你应该更喜欢在括号中指定类型。

要捕获的异常可以是从int开始并以指向派生自异常类的对象的指针结束的任何类型。这个概念非常灵活,但您必须知道可能发生的异常。

这可能是一个更具体的例子,使用std :: excpetion:注意引用的引用。

try
{
    throw std::exception();
}
catch (const std::exception& e)
{
    // ...
}

下一个示例假设您使用MFC库编写C ++。它阐明了执行CException catch因为CFileException派生自CException。如果不再需要,CException对象将自行删除。除非您的异常派生自CException,否则不应抛出指针并坚持上述示例。

try
{
    throw new CFileException();
}
catch (CException* e)
{
    // CFileException is caught
}

最后但同样重要的是,这也很重要:您可以定义几个catch块来捕获不同的异常:

try
{
    throw new CFileException();
}
catch (CMemoryException* e)
{
    // ignore e
}
catch (CFileException* e)
{
    // rethrow exception so it gets handeled else where
    throw;
}
catch (CException* e)
{
    // note that catching the base class should be the last catch
}

答案 1 :(得分:1)

您可以使用简单的if..else循环进行简单的用户输入验证。您可以以非常类似的方式使用异常

e.g。

try {
      ...code that can generate the error...
   } catch (some_exception& e) {
     ...code that handles the error...
   }

答案 2 :(得分:0)

使用try-catch块在C ++中处理异常。异常处理是C ++相对于C的一个改进特性。异常处理可防止程序因未知错误而崩溃。

 try
    {
         //code to be tried
    }
    catch(Exception& e)
    {
          //make user understand the problem
      throw [expression]
    }

你可以通读MSDN page 或者为了基本的理解,您可以阅读this

答案 3 :(得分:0)

您可以自己从基础Exception类继承,以拥有自己的Exception类型,或者使用已经准备好的Exception类,就像我的朋友将它们带到那里一样。 关于您的情况,您可能需要提供基于基本异常类的异常 如果不满足你想要的条件,首先评估输入并抛出你写异常的异常。 像这样:

class myException:Exception {
...
}

int evaluateInput(input) {
 if
 ...
 else
  throw myException;
}

// Get input from user

try:
 cin>>input;
 evaluateInput(input);
catch(myException)
 doWhatYouWant;