我正在为Euler项目问题3构建一个程序,虽然这可能并不重要,因此我正在尝试使这个代码取一个数字并测试它是否是素数。现在,在我对函数进行故障排除之前,它在输入数字后立即给出了错误“浮点异常”。这是代码:
int main()
{
int input;
cout << "Enter number: " << endl;
cin>> input;
int i = input/2;
int c;
for (i>0; i--;) {
c= input%i;
if (c==0 || i == 1)
cout << "not prime" << endl;
else
cout << "prime" << endl;
}
return 0;
}
所以基本上为什么它给我一个浮点异常,这甚至意味着什么?
答案 0 :(得分:32)
for (i>0; i--;)
可能是错误的,应该是
for (; i>0; i--)
代替。注意我把分号放在哪里。条件在中间,而不是在开始时。
答案 1 :(得分:31)
“floating point number”是计算机通常表示非整数的数字 - 基本上是一个带小数点的数字。在C ++中,您使用float
而不是int
声明它们。浮点异常是当您尝试使用浮点数执行某些不可能的操作时发生的错误,例如除以零。
答案 2 :(得分:9)
浮点异常的原因很多。看看你的代码你的for循环似乎有点“不正确”。看起来可能是零除。
for (i>0; i--;){
c= input%i;
自从你减少i以后,在某个时刻将其除以零。
答案 3 :(得分:0)
问题在于代码段中的for循环:
for(i> 0; i - ;)
在这里,你的意图似乎是进入循环if(i&gt; 0)和 在for循环完成后,将i的值减去一个。
它是那样的吗?让我们看看。
查看for()循环语法:
**for ( initialization; condition check; increment/decrement ) {
statements;
}**
初始化仅在循环开始时执行一次。 密切关注&#34;;&#34;在您的代码段中,并使用for循环语法映射它。
初始化:i&gt; 0:只执行一次。对您的代码没有任何影响。
条件检查:i - :减去后。
Here, i is used for condition check and then it is decremented.
Decremented value will be used in statements within for loop.
This condition check is working as increment/decrement too in your code.
让我们在这里停下来看看浮点异常。
这是什么?一个简单的例子是Divide by 0.与您的代码相同。当条件检查中达到1时,条件检查验证为真 由于后递减,当它进入循环时我将为0。
Modulo operation at line #9 results in divide by zero operation.
有了这个背景,你应该能够解决for循环中的问题。