Непонятная ситуация с if и типом _Bool - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Программа должна выводить делители, поделив на которые число остается без остатка, если число простое то выводится сообщение об этом и продолжается ввод чисел для вычисления делителей.Проблема в том, что когда я ввожу не простое число, т.е без делителей кроме себя и 1, то прога выводит сообщение что это простое число пока счетчик цикла не выдаст значение больше квадрата числа, то есть если ввожу 139, то компилятор выдает "139 простое число" 10 раз, а надо что бы один. Вот код. И еще, это норма что bool поддерживается без заголовочного файла <stdbool.h>, а то когда я его прописываю компил выдает ошибку, что такого в помине не знает.
#include <stdio.h>

int main(void)
{
    long num;
    long div;
    bool numisprime;
    printf("Enet simple num for analize\n");
    while(scanf_s("%ld", &num) == 1)
        for(div = 2, numisprime = true; (div * div) <= num; div++)
        {
            if(num % div == 0)
            {
                if((div * div) != num)
                    
                    printf("%ld divided on %ld and %d\n", num, div, num / div);
            
                else 
                printf("%ld divided on %ld\n", num, div);
                numisprime = false;
          }         
            if(numisprime)
                printf("%ld prime num\n", num);

            }
 
        return 0;
}

Решение задачи: «Непонятная ситуация с if и типом _Bool»

textual
Листинг программы
#include <stdio.h>
 
int main(void)
{
 long num, div;
 int numisprime;
 printf("Enet simple num for analize\n");
 while(scanf("%ld", &num) == 1) {
  for(div = 2, numisprime=1; (div * div) <= num; div++) {
   if(num % div == 0) {
    printf("%ld divided on %ld\n", num, div);
    numisprime = 0;
   }
  }
  if(numisprime)
   printf("%ld prime num\n", num);
 }
 return 0;
}

Объяснение кода листинга программы

В этом коде проверяется, является ли введенное число простым. Вот список действий:

  1. Ввод числа с клавиатуры.
  2. Проверка, является ли число простым. Для этого используется цикл, который проверяет, делится ли число на какое-либо из чисел от 2 до квадратного корня из введенного числа.
  3. Если число делится на какое-либо из этих чисел без остатка, оно не является простым, и на экран выводится сообщение о том, на какое число оно делится.
  4. Если число не делится ни на одно из чисел от 2 до квадратного корня из введенного числа, оно является простым, и на экран выводится сообщение о том, что это простое число.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 3.714 из 5