程序在15秒后进入无限循环

时间:2013-08-02 18:32:05

标签: c loops

我正在制定一个程序来查找给定数字的素数因子 虽然程序运行正常,但我有两个问题 1.当我输入一个奇数时,它在结果中打印2,尽管2不应该在其中 2. 15秒后,它变成一个无限循环,真是令人毛骨悚然。

#include<stdio.h>
#include<conio.h>
int num(int); // Making a function for finding prime factors
int main()
{
    int i,j;
    printf("Enter any number");
    scanf("%d",&i);
    num(i);

    getch();

    }

int num(int i)
{

    int a=2;
    while(a<=i)
    {

        if(i%a==0) //if the number is divisible then divide it
            i=i/a;

        printf(" %d",a);

        if(i%a!=0) 
       {
            i%a;
            while(i%a!=0)// If it is not divisible by 2 then increment it until it is
                 a++;
       }

    }

}

2 个答案:

答案 0 :(得分:4)

它总是打印2,因为print语句不是测试mod 0的if的一部分。它进入无限循环,因为一旦传递i,第二个while循环将永远不会退出。

答案 1 :(得分:2)

无限循环是您的第二个while循环,while(i%a!=0)。对于素数,这将持续不断。有一些聪明的方法可以解决这个问题,但至少要将其改为

while(i%a!=0 && a<=i)

我不确定为什么2会出现奇数,仍在考虑这部分。

编辑正如Fred所说,打印输出不是if语句的一部分,导致2总是出现。就个人而言,我建议养成{ }语句之后始终放if的习惯。即使你已经编写了几十年,这也将确保你能在你的条件下得到正确的陈述。