- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
当我尝试除以 0 时,以下代码没有捕获异常。我需要抛出异常,还是计算机会在运行时自动抛出异常?
int i = 0;
cin >> i; // what if someone enters zero?
try {
i = 5/i;
}
catch (std::logic_error e) {
cerr << e.what();
}
最佳答案
需要自己检查,抛出异常。整数除以零在标准 C++ 中也不异常(exception)。
float 除以零但至少有特定的处理方法。
ISO 标准中列出的异常(exception)情况是:
namespace std {
class logic_error;
class domain_error;
class invalid_argument;
class length_error;
class out_of_range;
class runtime_error;
class range_error;
class overflow_error;
class underflow_error;
}
并且您可以非常有说服力地争论 overflow_error
(IEEE754 float 生成的无穷大可以被认为是溢出)或 domain_error
(它是 输入值有问题)非常适合指示除以零。
但是,5.6
部分(属于 C++11
,尽管我认为这与之前的迭代相比没有变化)明确指出:
If the second operand of
/
or%
is zero, the behavior is undefined.
因此,它可以抛出那些(或任何其他)异常。它还可以格式化你的硬盘并 mock :-)
如果你想实现这样的野兽,你可以在下面的程序中使用类似 intDivEx
的东西(使用溢出变体):
#include <iostream>
#include <stdexcept>
// Integer division/remainder, catching divide by zero.
inline int intDivEx (int numerator, int denominator) {
if (denominator == 0)
throw std::overflow_error("Divide by zero exception");
return numerator / denominator;
}
inline int intModEx (int numerator, int denominator) {
if (denominator == 0)
throw std::overflow_error("Divide by zero exception");
return numerator % denominator;
}
int main (void) {
int i = 42;
try { i = intDivEx (10, 0); }
catch (std::overflow_error &e) {
std::cout << e.what() << " -> ";
}
std::cout << i << std::endl;
try { i = intDivEx (10, 2); }
catch (std::overflow_error &e) {
std::cout << e.what() << " -> ";
}
std::cout << i << std::endl;
return 0;
}
这个输出:
Divide by zero exception -> 42
5
您可以看到它抛出并捕获除以零情况下的异常(保持返回变量不变)。
%
等价物几乎完全相同:
关于c++ - 捕获异常 : divide by zero,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18023032/
我使用 scipy.stats.spearmanr(a,b) 我得到: Warning: divide by zero encountered in divide 操作正确结束,但显示警告。 a 和
我使用 , 比如 .我认为使用 like 没问题.然而,有时不显示。 我用了在 ,但是 未显示。我应该只使用 吗?在 ? 如果有人遇到与我相同的问题,请分享您解决此问题的经验。 这是我的代码
I am trying to divide a very large even number 13144131834269512219260941993714669605006625743172006
我向 Mongo DB 创建了一个请求: { $project: { difference: { $subtract:
我有一个 JavaFX 应用程序 拆分 Pane .我想禁用 分隔线 在 拆分 Pane ,因此在应用程序运行时无法更改其位置。我怎样才能做到这一点? 最佳答案 没有 API,所以一旦显示了场景,我们
我尝试做一个简单的 Swing 窗,但布局并不容易...我的意思是我只想要一个有 3 个面板的窗口: 标题占窗口高度的 20% 内容占窗口高度的 60% 页脚占窗口高度的 20% 但我无法成功拥有我想
我尝试做一个简单的 Swing 窗,但布局并不容易...我的意思是我只想要一个有 3 个面板的窗口: 标题占窗口高度的 20% 内容占窗口高度的 60% 页脚占窗口高度的 20% 但我无法成功拥有我想
我正在尝试替换字符串中的字符。假设字符串是: "yaaaaaaaay:axaxaxaxa:yaaaaaaay" 我希望java将:之后的所有a更改为X,直到下一个:。所以它看起来像这样: "yaaaa
我在下面的代码中尝试 Perl 的 PDL: #!/usr/bin/perl -w use strict; use PDL::Core qw(pdl); use PDL::Math qw(isfin
这个问题已经有答案了: Is floating point math broken? (33 个回答) 已关闭 7 年前。 我在使用 BigDecimal 执行除法时得到不正确的结果。数字1 = 22
只是一个简单的问题,我无法理解,希望你们能帮忙。 我有一个div (带有 ID),单击时将打开一个新的 div - 很好,效果很好,我真正想要的是“填充”新的 div带有基于单击的 div ID 的预
我正在使用 BigDecimal 进行一些浮点运算。如果将 5 除以 4.2,您将得到一个异常(因为结果有一个不能用 BigDecimal 表示的非终止扩展) )即 BigDecimal five =
我的目标是获得类似于下图所示的分隔线: Goal Picture Divider 我需要在 LinearLayout 之间放置一个水平和垂直分隔线 这是我的用户界面 XML 代码:
我正在尝试以 Angular Testing 弹出组件,但我不知道为什么当我启动测试时出现错误: 'mat-divider' is not a known element: 1. If 'mat-di
已关闭。这个问题是 not reproducible or was caused by typos 。目前不接受答案。 这个问题是由拼写错误或无法再重现的问题引起的。虽然类似的问题可能是 on-top
我知道 md-divider 用于 md-list 但我希望它在 flex-layout 中 例如: 应该在两个 div 之间有一个水平分隔线,对于另一种情况
当我尝试除以 0 时,以下代码没有捕获异常。我需要抛出异常,还是计算机会在运行时自动抛出异常? int i = 0; cin >> i; // what if someone enters zero
当我尝试除以 0 时,以下代码没有捕获异常。我需要抛出异常,还是计算机会在运行时自动抛出异常? int i = 0; cin >> i; // what if someone enters zero
这个问题在这里已经有了答案: Division by zero: Undefined Behavior or Implementation Defined in C and/or C++? (8 个
我的代码将以这种方式工作: input : a[]="create /dir/bar" 并保存在这个字符串中: b[]=create c[]=/dir/bar 还有一种情况是我保存了另外一个字符串:
我是一名优秀的程序员,十分优秀!