【问题标题】:what do i do with throw to handle wrong data type in c++我该如何处理c++中的错误数据类型
【发布时间】:2013-12-20 18:15:03
【问题描述】:

所以我正在尝试将整数转换为十六进制,并且我将非 int 类型以及负数放入输入变量中。当我添加抛出代码时,它会失败。没有 throw 它将永远循环。我是否抛出了错误的抛出论点?我的 if 语句将如何处理非 int 类型,例如 a、b car 到 num 变量中?

cout<<"please enter integer number to be converted to binary (less than 65536) "<<endl;
    cin>>num; 
if (num <=0)
{
   throw invalid_argument("wrong input");
}
else
cout << num + 1;

【问题讨论】:

标签: c++ throw


【解决方案1】:

如果cin &gt;&gt; input 操作失败,input 将不会为其设置值(即,无论它具有什么值,它都会继续具有)。您没有在现有代码中显示循环,因此如果您在循环中重用相同的变量,它将无限循环,因为在提取失败后,标准输入的失败位被设置,并且 num 将具有它具有的任何值之前。您必须先清除它,然后再尝试再次读取。处理此类输入错误的典型方法如下:

int num;
while (!(cin >> num))
{
    std::cout << "Please enter a valid value!" << std::endl;
    std::cin.clear();
    std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}

在这种情况下没有充分的理由使用异常,但如果你这样做了,它看起来像这样:

int num;
if (!(cin >> num))
{
    throw std::invalid_argument("Invalid entry");
}

这意味着您必须在 catch 块中重置标准输入缓冲区。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-15
    • 2020-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多