当我运行这个程序时,我收到一个名为"浮点异常"的错误。

时间:2018-04-20 12:03:46

标签: c

运行此程序时出现浮点异常:

#include <stdio.h>

int check(int n)
{
    int ii=0;
    int jj=0;
    int sum_of_dividors=0;
    int sum_of_dividors2=0;
    for (ii=0;ii<n;ii++){
        for (jj=0;jj<ii;jj++){
            if(ii%jj==0)
            {
              sum_of_dividors=sum_of_dividors+jj;
            }
        }
        if(sum_of_dividors<n || ii<n){
            for (jj=0;jj<sum_of_dividors;jj++){
                if(sum_of_dividors%jj==0)
                {
                sum_of_dividors2=sum_of_dividors2+jj;
                }
            }
        if (sum_of_dividors2==ii){
            printf("%d and %d,",ii,sum_of_dividors);
        }
        }
    sum_of_dividors=0;
    sum_of_dividors2=0;
    }
}


int main()
{
    int n;

    printf("Enter n ");
    scanf("%d",&n);
    printf("%d",check(n));
}

代码的目的是检查最接近的友好数字对与用户输入的数字(n)。

4 个答案:

答案 0 :(得分:1)

如果您使用GDB查看,则问题出在

if(ii%jj==0)

Can't Mod Zero?

答案 1 :(得分:1)

C 6.5.5 [ISO / IEC 9899:2011]声明:

  

/运算符的结果是来自除法的除法   第一个操作数由第二个操作数; %运算符的结果是   剩余。 在两个操作中,如果第二个操作数的值为   零,行为未定义

因此,以0为模,在C中调用未定义的行为。

答案 2 :(得分:0)

你不能mod % by 0!它会给出未定义的行为!

答案 3 :(得分:0)

除结果外,您应该申请%/完全相同的限制。因此,在C和C ++中,你可以用0修改。如果你想要一个X%0等于X的行为,你必须专门检查X是否等于0,然后返回它