微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我的代码有什么问题?主要原因

如何解决我的代码有什么问题?主要原因

    int main ()
    {
    int num,i=num,isPrime;
    printf("Enter an integer: ");
    scanf("%d",&num);

    while (i>=2)
    {
        if (num%i!=0)
            i--;

        if (num%i==0) //check if it is a factor
            {
                isPrime = 1;
                for (int j=2; j<=i; j++)
                {
                    if (i%j==0)
                    {
                    isPrime = 0;
                    break;
                    }
                }
                if (isPrime==1)
                {
                    printf("%d ",i);
                    num = num/i;
                }
            }
    }
    return 0;
}

我可以知道为什么我的代码不起作用吗? 我试图编写一个 C 代码,它打印给定数字的所有质因数,从最大到最小,当我运行它时,在我输入一个数字后什么都不显示

解决方法

    缺少使用 #includestdio.h 的必需标头 printf()
  • scanf()
  • 在将值读取到 num 之前,将
  • i 分配给 num。这是将不确定的值分配给 i 并使用该值调用未定义行为
  • 循环 j 直到它变成 i 是错误的,因为除非 i%i 为零,否则 i 将始终为零。
  • inum%i==0 不是质数时,您也应该减少 i。否则,i 的更新将停在那里,循环可能会无限循环。
  • 两个 if 语句 if (num%i!=0)if (num%i==0) 可能会看到不同的 i 值。这发生在迭代开始时的 num%i!=0 时,因为 i 在条件为真时更新。您应该使用 else 而不是第二个 if 语句。

固定代码:

#include <stdio.h>

int main (void)
{
    int num,i,isPrime;
    printf("Please enter an integer: ");
    if (scanf("%d",&num) != 1)
    {
        fputs("read error\n",stderr);
        return 1;
    }

    i=num;
    while (i>=2)
    {
        if (num%i!=0) //check if it is a factor
        {
            i--;
        }
        else
        {
            isPrime = 1;
            for (int j=2; j<i; j++)
            {
                if (i%j==0)
                {
                    isPrime = 0;
                    break;
                }
            }
            if (isPrime==1)
            {
                printf("%d ",i);
                num = num/i;
            }
            else
            {
                i--;
            }
        }
    }
    return 0;
}
,

这里至少有一个错误:

int num,i=num,isPrime;

您似乎试图使 i 等于 num。但是这里的 `num 甚至还没有被初始化。您必须在阅读用户输入后进行分配:

int num,isPrime;
printf("Please enter an integer: ");
scanf("%d",&num);
i=num;

素数的检查也是错误的:

            for (int j=2; j<=i; j++)
            {
                if (i%j==0)
                {
                    isPrime = 0;
                    break;
                }
            }

由于您使用 j<=i,因此 j 最终将等于 i 并且 i%j==0 将为真,因此您找不到任何质数。试试j<i

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。