2015-05-13 3 views
-2

Я изучаю C, не могли бы вы помочь мне найти ошибку в моей программе? Я перепечатал код из книги, и до сих пор не знаю, где моя ошибка. Я попытался использовать https://www.diffchecker.com/diff, но я не вижу никакой логической разницы. Я сдаюсь. Не могли бы вы мне помочь?Пожалуйста, помогите мне найти ошибку - программа, которая показывает простые числа

Мой код:

//ex7_9.c 
#include <stdio.h> 
#include <stdbool.h> 

int main(void){ 

    int num; 
    int limit; 
    int div; 
    bool isPrime; 

    printf("Please insert your number: "); 
    while((scanf("%d", &limit) == 1) && limit > 0){ 
     if(limit > 1) 
      printf("Here are prime numbers up to %d limit\n", limit); 
     else 
      printf("Change limit - to bigger than one\n"); 

     for(num=2; num <= limit; num++){ 
      for(div=2, isPrime=true; (div*div) <=num; div++){ 

       if(num % div ==0) 
        isPrime = false; 

       if(isPrime) 
        printf("%d is prime \n",num); 

      } 
     } 
    } 

    return 0; 
} 

правильный код:

//ex7_9.c 
#include <stdio.h> 
#include <stdbool.h> 

int main(void){ 

    int limit; 
    int num; 
    int div; 
    bool numIsPrime; 

    printf("Enter a positive integer: "); 
    while (scanf("%d", &limit) == 1 && limit > 0){ 
     if (limit > 1) 
      printf("Here are the prime numbers up through %d\n", limit); 
     else 
      printf("No primes.\n"); 
     for (num = 2; num <= limit; num++) 
     { 
      for (div = 2, numIsPrime = true; (div * div) <= num; div++) 
       if (num % div == 0) 
        numIsPrime = false; 
      if (numIsPrime) 
       printf("%d is prime.\n", num); 
     } 
     printf("Enter a positive integer (q to quit): "); 
    } 
    printf("Done!\n"); 
    return 0; 
} 

результаты из моего кода:

Please insert your number: 10 
Here are prime numbers up to 10 limit 
5 is prime 
7 is prime 
9 is prime 
+1

Какая ошибка вы видите? – Amit

+0

Я не вижу правильных результатов, это ommits 2 и 3 :( – Misiek777

+0

Ваша проблема заключается в фигурных скобках последнего 'for'. Это означает только цикл вокруг следующего' if', а не последнего. ('If (isPrime) 'должно быть вне области' for') – Amit

ответ

2

Вы добавили скобки на вашем внутреннем цикле.

Ваш код

for(num=2; num <= limit; num++){ 
    for(div=2, isPrime = true; div * div <=num; div++){ 
     if(num % div == 0) 
     { 
      isPrime = false; 
     } 
     if(isPrime) 
     { 
      printf("%d is prime \n",num); 
     } 
    } 
} 

в то время как оригинал с явными скобками добавляемых

for (num = 2; num <= limit; num++) 
{ 
    for (div = 2, numIsPrime = true; div * div <= num; div++) 
    { 
     if (num % div == 0) 
     { 
      numIsPrime = false; 
     } 
    } 
    if (numIsPrime) 
    { 
     printf("%d is prime.\n", num); 
    } 
} 

Ваш второй if находится внутри внутреннего цикла; в оригинале это снаружи.

+0

Большое вам спасибо! – Misiek777

Смежные вопросы