Почему в цикле While выполняется больше итераций чем надо? - C (СИ)

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

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

Всем привет. Имеется задача ,
С клавиатуры вводятся числа. Признак окончания ввода число 0. Определить количество чисел сумма делителей которых четное число (исключая 1 и само число).
Я набросал код. Но проблема в том, что тело цикла while выполняется больше чем надо на 1. Как это можно исправить? Пробовал и do while (number!=0) но результат тот же..
#include <stdio.h>
 
int main (void)
{
    int number; /* Вводимое число. */
    int i;      /* Счетчик цикла   */
    int summa;  /* Сумма делетилей */
    int count;  /* Количество чисел, у которых четная сумма делителей. */
 
    summa = 0;
    count = 0;
 
while(number!=0)  /*Пока число не равно 0 (0-признак окончния ввода)
                          Если я правильно понимаю, то тело цикла должно прекратится выполнятся когда число будет равно 0. */
{
    scanf("%d",&number);    /* Вводим число. */
 
    if (number < 0)
    {
        number = -number;  /* Если введено отрицательное число, меняем ему знак. */
    }
 
    /* Проверяем в цикле делители числа. */
    for (i=2;i<number;i++)
    {
 
        if (number % i == 0)
        {
            summa = summa + i;    /* Считаем сумму делителей */
        }
 
    }
 
    /* Если сумма делителей четная, то увеличиваем количество чисел для которых она четна на единицу.
        Вот тут и вся загвостка. count считается больше чем нужно на 1.  */
 
    if (summa % 2 == 0)
    {
        count++;
    }
 
}
    /* Выводим результат. */
    printf("Summa: %d\n",summa);
    printf("Count: %d\n",count);
 
    return 0;
}

Решение задачи: «Почему в цикле While выполняется больше итераций чем надо?»

textual
Листинг программы
if (!number) break;

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


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

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

13   голосов , оценка 3.615 из 5