我正在开发一个非常小的程序,用于查找C ++中整数的除数。我的主要方法几乎将int转换为var并以int作为参数调用factor方法。这是代码:
void factor(int num)
{
for(int x = 0; x < ((num + 2) / 2); x++)
{
if((num % x) == 0)
{
cout << x << " ";
}
}
}
程序总是在factor()内部崩溃。如果我使用此代码,则可以正常运行:
void factor(int num)
{
for(int x = 0; x < ((num + 2) / 2); x++)
{
{
cout << x << " ";
}
}
}
所以问题出在哪里if((num % x) == 0)
。当我将该行更改为if((num % 2) == 0)
或时if((num % 5) == 0)
,它会产生正确的结果(我使用32作为测试输入)。
几年前,我学习了C ++,却忘了大部分知识,在遇到此问题后,我从以前的解决方案(有效)中逐字复制了代码。但是,每当我尝试访问循环计数器时,程序仍然崩溃。
我在Arch Linux 64位上使用带有GCC“ 4.9.0 20140604(prerelease)”的Code :: Blocks 13.12。
问题是,您的第一个代码段中存在被零除的行为,根据标准(n3337),该行为是不确定的:
5.6p4
乘法运算符[expr.mul]
二元
/
运算符产生商,二元%
运算符从第一个表达式除以第二个表达式得到余数。如果/
或的第二个操作数%
为零,则行为不确定。
由于程序无法计算此类表达式的值,因此将崩溃。
if((num % x) == 0) // num % 0 on first iteration, application will crash, or order pizza
{
cout << x << " ";
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句