2015-01-21 6 views
-1

Определить, является ли число простым или нет. Выполнено с использованием Codeblocks 13.12. компилятор GNU GCC 4.7.0C Программа - простые номера

#include <stdio.h> 

main() 
{ 
    int input,check,count; 

    printf("Enter the number: "); 
    scanf("&d",&check); 

    count=0;   
    for(check=1;check<=1;check++) 
    { 
     if((input%check)==0) 
     { 
      count++; 
     } 
    } 
    if(count==2) 
    { 
     printf("The number %d is prime",check); 
    } 
    else 
    { 
     printf("The number %d is not prime",check); 
    } 
} 

Пожалуйста, обратите внимание, что нет ошибки или предупреждения. Но компилятор принимает число «2» даже после ввода некоторого ввода, и он говорит, что 2 не является простым!

+3

Первое, что не так: ваше название. – Maroun

+2

Вертикальная стрелка верна, также вы должны добавить 'int' перед' main() 'и в вашем цикле' for' вы сбросите значение 'check' на 1. Есть несколько вещей, которые нужно исправить. – Phixle

+0

Между прочим, цикл for таков, что проверка начинается с 1 и может быть меньше или равна 1 и увеличивается, поэтому она запускается только один раз - она ​​вообще не изменяется в цикле. .. Кроме того, он как минимум сбивает с толку использование «проверки» как для переменной scanf, так и для переменной цикла цикла (не уверен, как C разрешает это, честно говоря, на некоторых языках, он просто перезаписывает ее, но, возможно, есть отдельные экземпляры для каждой области). – JosephDoggie

ответ

0

Ну, я полагаю, что всегда кто-то делает код для искателя в любом случае.

#include <stdio.h> 
#include <conio.h> 

int main() // note "int" before "main()" 
{ 
    int input, check, count; 
    printf("Enter the number: "); 
    scanf("%d", &input); //I believe this is what you meant instead of storing the inputted value in "check" 

    count = 0; 
    check = 2; //Check should equal "2" because anything divided by one will have no remainder 


    while((count != 1) && (check <= 50)) //If you want to stop trying to divide when the number you're dividing by is above 50, change this line. I stopped at 50 just as a random number, but I'm sure there's a more logical one to use. ------ "while(count != 1)" stops the loop when the number is successfully divided. 

    { 
     if (check == input) break; // stop checking when the number we're trying to divide is equal to the number to divide by. 

     if((input%check) == 0) 
     { 
      count++; 
     } 

     check++; //increment the number we're checking by 
    } 

    if(count == 1) 
    { 
     printf("The number %d is not prime\n", input); // output the number the user tried to input 
    } 

    else 
    { 
     printf("The number %d is prime\n", input); 
    } 

    getch(); 
    return 1; 
} 

Я прошу вас прочитать комментарии и понять их вместо того, чтобы просто скопировать код, как я видел, сделано так много раз.

Редактировать: Моя ошибка изначально включает в себя функцию C++. Сейчас в C.

+0

OP - ** не ** с тегом [tag: C++]. –

+0

Извините. Простое исправление. – Phixle

+0

Спасибо! Это помогло мне! –

2
scanf("&d",&check); 

должен быть

//  v-- percent, not ampersand 
scanf("%d",&check); 

Или (возможно)

scanf("%d", &input); 

... так как это было бы сделать гораздо больше смысла читать в переменную input. Позже в программе, а затем,

printf("The number %d is prime", check); 

должен быть

printf("The number %d is prime\n", input); 

, потому что вы проверяете input, не check. Эти же две строки ниже. Наконец, условие цикла в

for(check=1;check<=1;check++) 

не имеет смысла. Цикл будет работать ровно один раз, и вы не хотите, чтобы проверить, если вход делится на 1. Это будет иметь смысл с

    // v-- check factors until input 
for(check=1;check<=input;check++) 

Это не самый эффективный чек здесь, но это то, чтобы вы начали ,

Side Примечание: прототип

main() 

соответствует только с C89. Не от C99 года, старый K & метод R декларации функции больше не включается, и правильный эквивалент прототипом главной является

int main(void) 

Таким образом, хотя вы фиксируя вещи, вы должны положить, что там.

+0

Вы правы! и спасибо, что нашли время, чтобы помочь мне .... но все равно такая же ошибка –

+0

Yeees, есть еще несколько вещей. Принял у меня минуту, чтобы увидеть их всех. – Wintermute

0

Некоторые вопросы:

  1. Переменная input не определен, который содержит значение мусора.
  2. for(check=1;check<=1;check++) Это кажется неправильным, петли только один раз для всех случаев.
  3. Прочитайте значения с помощью scanf, указав спецификатор формата как %d вместо &d.
Смежные вопросы