程序错误:语句中不需要的数字

时间:2015-11-09 16:03:17

标签: c primes

我正在创建一个程序,用户输入一个介于2和1000000之间的正整数,如果是素数,则打印"该数字是素数"如果它不是素数,则打印数字的分解。每当我输入一个素数(即:3)时,它会打印出它是一个素数,但是在这段时间之后它会再次打印这个数字(即:数字3是一个素数.3)。我似乎无法找到为什么会发生这种情况,有谁知道我在哪里犯了错误?

#include <stdio.h>
int main()
{
int N, i, div, flag=0;
printf("Please enter a positive integer: ");
scanf("%d",&N);
for(i=2;i<=N/2;++i)
{
  if(N%i==0)
  {
      flag=1;
      break;
  }
}
if (flag==0)
  printf("The number %d is a prime number.", N);
else
printf("The number %d is not a prime number.\nThe prime factors of %d              are:",N, N);

div = 2;

while(N!=0){
    if(N%div!=0)
        div = div + 1;
    else {
        N = N / div;
        printf("%d ",div);
        if(N==1)
            break;
    }
}
  return 0;
}

2 个答案:

答案 0 :(得分:0)

这种情况正在发生,因为即使它是素数,后来的while循环也会被执行。这会打印3,这是通过此声明

printf("%d ",div);

要停止此操作,您可以在while循环中添加另一个检查,如果它是素数,将阻止它进入。

while(N!=0 && flag==1) //flag will be 1 if the number is not prime, and factors are present

或者,您可以将其他部分保留在`else语句中,例如

if (flag==0)
    printf("The number %d is a prime number.", N);
else
{
    printf("The number %d is not a prime number.\nThe prime factors of %d              are:",N, N);

    div = 2;

    while(N!=0){
        if(N%div!=0)
            div = div + 1;
        else {
            N = N / div;
            printf("%d ",div);
            if(N==1)
                break;
        }
    }
}

答案 1 :(得分:0)

您忘记了else声明的括号。所以else(不是素数)仅适用于printf

其余的总是被执行,无论是否为素数。