【问题标题】:program going into infinite loop after 15 seconds程序在 15 秒后进入无限循环
【发布时间】:2013-08-02 18:32:05
【问题描述】:

我正在编写一个程序来查找给定数字的素阶乘。
虽然程序运行良好,但我有两个问题。
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++;
       }

    }

}

【问题讨论】:

  • 输出后出现无穷大
  • 说我输入56,然后它会告诉我因素,然后过一段时间,它变成一个无限循环
  • 它只是重复打印-1
  • 这条声明,i%a;什么都没有

标签: c loops


【解决方案1】:

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

【讨论】:

  • 谢谢先生!我的代码现在工作正常。是的,我会养成在“if”语句中使用大括号的习惯。 :)
【解决方案2】:

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

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

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

编辑 正如 Fred 提到的,打印输出不是 if 语句的一部分,导致 2 总是出现。就个人而言,我建议养成在 if 声明之后始终放置 { } 的习惯。即使您已经编写了几十年的代码,这也将确保您在自己的情况下得到正确的陈述。

【讨论】:

  • 但我已经在第一个循环中设置了 a
  • @KhalidAhmed 问问自己:什么会导致第二个循环退出?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多