该程序如何产生浮点错误?

时间:2017-03-25 18:19:06

标签: runtime floating

这是我试图用c解决的“某种”逻辑问题。 我基本上输入一个数字中所有除数的数字,并将数字添加到一个数字数字并存储在变量'best'中。 但我得到的输出是“浮点异常(核心转储)” 认为这将是一个循环的问题,但我找不到任何。 我能否知道这个错误的含义是什么?是什么导致它?

#include <stdio.h>

void main()
{
int n,a[50],b[50],k=0,l1=0,l2=0,temp,big,bigi,best=0,i,l3;

printf("Enter an integer (less than 10^5):- ");
scanf("%d",&n);

for(i=1;i<=n;i++)
{
    if(n%i==0)
    { 
        a[k]=i;
        k++;
    }
}

for(i=0;i<k;i++)
{
    b[i]=a[i];
}  

for(i=0;i<k;i++)
{
    if(a[i]<10) 
    {
        continue;
    }   
    else
    {
        l3=a[i];
        while(l3>0)
        {
            temp=l3%10;
            l1=l1+temp;
            l3=l3/10;
        }
        if(l1>=10)
        {
            while(l1>0)
            {
                temp=l1%10;
                l2=l2+temp;
                l1=l1/10;
            }
        }
        a[i]=l2;
    }
}

big=a[0];
for(i=0;i<k;i++)
{
    if(a[i]>big) 
    {
        big=a[i];
        bigi=i;
    }
}

for(i=0;i<k;i++)
{
    while(i!=bigi)
    {
        if(a[bigi]==a[i])
        {
            if(b[bigi]>b[i])
            {
                best=a[i];
            }
            else
            {
                best=a[bigi];
            }
        }
    }
    if(best=0)
    {
        best=a[bigi];
    }
}
printf("The best number is :- %d",best);
}

1 个答案:

答案 0 :(得分:1)

哦天哪史蒂夫,你的代码格式化!

我没有答案,但我愿意打赌它与数组索引有关。您正在创建一个包含50个元素的数组。

然后您使用索引 k访问它,这取决于您的输入!你怎么能保证k不会超过49?

在那里放一些调试printfs。到处。监控您的变量 k 。看看你的循环在做什么,以及你陷入困境的地方。

为了我自己的理智,以及其他任何读这篇文章的人,在这里:

#include <stdio.h>

void main()
{
    int n,a[50],b[50],k=0,l1=0,l2=0,temp,big,bigi,best=0,i,l3;

    printf("Enter an integer (less than 10^5):- ");
    scanf("%d",&n);

    for(i=1;i<=n;i++)
    {
        if(n%i==0)
        { 
            a[k]=i;
            k++;
        }
    }

    for(i=0;i<k;i++)
    {
        b[i]=a[i];
    }  

    for(i=0;i<k;i++)
    {
        if(a[i]<10) 
        {
            continue;
        }   
        else
        {
            l3=a[i];
            while(l3>0)
            {
                temp=l3%10;
                l1=l1+temp;
                l3=l3/10;
            }
            if(l1>=10)
            {
                while(l1>0)
                {
                    temp=l1%10;
                    l2=l2+temp;
                    l1=l1/10;
                }
            }
            a[i]=l2;
        }
    }

    big=a[0];
    for(i=0;i<k;i++)
    {
        if(a[i]>big) 
        {
            big=a[i];
            bigi=i;
        }
    }

    for(i=0;i<k;i++)
    {
        while(i!=bigi)
        {
            if(a[bigi]==a[i])
            {
                if(b[bigi]>b[i])
                {
                    best=a[i];
                }
                else
                {
                    best=a[bigi];
                }
            }
        }
        if(best=0)
        {
            best=a[bigi];
        }
    }
    printf("The best number is :- %d",best);
}