【问题标题】:Why is a divide by error coming?为什么会出现除错?
【发布时间】:2014-11-08 20:23:40
【问题描述】:

以下代码中显示了除以零错误。 我正在使用 dosbox 0.74 编译器

int chkpm(int,int);
void main()
{
    int num,i,count=-1;

    cout<<"Enter a number\n";
    cin>>num;
    for(i=0;i<=num/2;i++)
    {
        if(num%i==0)
        {       //test
            `enter code here`cout<<"num%i=0";

     count=chkpm(num,i);
        }
        if(count>0)
        {
            cout<<i<<" ^ "<<count;
        }
    }
    cout<<"bye test \n";
    getch();
}
int chkpm(int num,int i)
{
    int j,flag=0; //flag will be true if i is not prime factor
    int count=0;        //to calculate power of prime factor
    for(j=0;j<=i/2;j++)  //to check for prime
    {
        if(i%j==0)  //check for divisibility
        {
            flag=1; //that means i is not prime
            break;
        }
    }
    if(flag==0)   //if factor i is prime,flag is 0
    {
        while(num%i==0) //keep dividing prime factor by num
        {       count++;  //to count power
            num=num/i;
        }
        return count;
    }
    else return -1;        //when flag=1, i.e. factor not prime
}

当我重新执行代码时显示错误,而不是在编译时 我已经尝试过从零到正数的各种输入......

任何帮助将不胜感激

【问题讨论】:

  • 您的问题在于执行 0 的模运算。num%ii==0 会产生错误时。除以零的余数是多少?除以零错误!
  • 无关,但您应该使用 int main() 而不是 void。
  • 他是对的..这是 0%0 错误

标签: c++ divide


【解决方案1】:
for(i=0;i<=num/2;i++)
{
    if(num%i==0)
    ...
}

这里i 将从值0 开始。% 表示取模,这实际上意味着将进行除法,因此在 if 条件中除以零。

在你的函数内部你有一个类似的逻辑错误:

for(j=0;j<=i/2;j++)  //to check for prime
{
    if(i%j==0)
    ...
}

如果你不修复main(),那么函数将i等于0,这会造成更多的伤害。


您使用void main(),而不是典型的int main()。您可能想查看this 相关问题。然后在退出 main() 之前添加一个 return 0

【讨论】:

  • 完成。我应该从 2 开始
  • @AbhishekWadhawan 确保您也修复了函数内部的类似逻辑错误!如果您对答案满意,请接受它,以便问题在问题提要中显示为已回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-22
  • 2011-04-23
相关资源
最近更新 更多