Посчитать произведение четных чисел

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

#include <ctime>
#include <stdlib.h>
#include <stdio.h>
#include <corecrt_math.h>
#include <time.h>

int main(){
    const int N = 20;
    int arr[N];
    //Заполнение случайными числами
    srand(time(0));
    for (int i = 0; i < N; i++)
    {
        arr[i] = rand() % 101 - 50; //[-50;50]
        printf_s("arr[%d] = %d\n", i + 1, arr[i]);
    }
    //Обработка массива-произведение четных чисел массива
    int dob = 1;
    for (int i = 0; i < N; i++)
    {
        if (arr[i] % 2 == 0);
        {
            printf("%d",arr[i]);
            dob = dob * arr[i];
        }

    }
    printf("\ndob = %d\n", dob);
    return 0;
}

Ответы (1 шт):

Автор решения: Dafter

Ваша главная ошибка находится в этой строчке: if (arr[i] % 2 == 0); а конкретнее в ; которой там определенно быть не должно, если ее убрать, код будет работать.

Однако естественно это не все ошибки, которые вы допустили:

  1. Вы импортируете библиотеки, которые вам не нужны
  2. При импорте вы пишите <название.h>, хотя для этих библиотек такой необходимости нет
  3. При диапазоне чисел [-50;50] вы используете int, в котором всего 4 байта, чего практически всегда не хватает
  4. Нет обработки случая с 0, а она нужна т.к. 0 % 2 == 0 вернет true, хотя 0 обычно не учитывают как четное

Я поправил эти моменты и код вышел таким:

#include <ctime>
#include <cstdlib>
#include <cstdio>

int main() {
    const int N = 20;
    int arr[N];
    // Заполнение случайными числами
    srand(time(0));
    for (int i = 0; i < N; i++) {
        arr[i] = rand() % 101 - 50; //[-50;50]
        printf_s("arr[%d] = %d\n", i + 1, arr[i]);
    }
    // Обработка массива - произведение четных чисел массива
    long long dob = 1;
    for (int i = 0; i < N; i++) {
        if (arr[i] % 2 == 0 && arr[i] != 0) {
            printf("%d ", arr[i]);
            dob = dob * arr[i];
        }
    }
    printf("\ndob = %lld\n", dob);
    return 0;
}

P.S Обработку массива можно чуток переписать, чтоб было читабельнее. А именно вместо этого:

for (int i = 0; i < N; i++) {
    if (arr[i] % 2 == 0 && arr[i] != 0) {
        printf("%d ", arr[i]);
        dob = dob * arr[i];
    }
}

Написать так:

for (int i : arr) {
    if (i % 2 == 0 && i != 0) {
        printf("%d ", i);
        dob = dob * i;
    }
}
→ Ссылка