Не понимаю почему выводятся числа в консоли при выводе массива

Задача: заполнить массив из 50-ти элементов нечётными числами от 1до 99.

int main()
{
    int mass[50];
    int pos[99];

    for (int i = 1; i < std::size(pos); i++) 
        pos[i] = i; // Заполняем массив числами по порядку


    for (int i = 0; i < std::size(mass); i++) {
        if (pos[i] % 2 != 0) {
            mass[i] = pos[i];
        } // Проверяем на нечётность и записываем только числа, прошедшие проверку
    }

    for (int i = 0; i < std::size(mass); i++) {
        std::cout << "\n" << mass[i]; // Выводим числа
    }
}

Это работает правильно, но на консоль помимо нечётных чисел выводятся ещё какие-то:

Вывод на консоль:

-858993460
1
-858993460
3
-858993460
5
-858993460
7
-858993460
9
-858993460
11
-858993460
13
-858993460
15
-858993460
17
-858993460
19
-858993460
21
-858993460
23
-858993460
25
-858993460
27
-858993460
29
-858993460
31
-858993460
33
-858993460
35
-858993460
37
-858993460
39
-858993460
41
-858993460
43
-858993460
45
-858993460
47
-858993460
49

Я думаю, что это их адреса в памяти, но зачем и почему они выводятся?


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

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

Ну-ка, посмотрим...

for (int i = 0; i < std::size(mass); i++) {
    if (pos[i] % 2 != 0) {
        mass[i] = pos[i];
    } // Проверяем на нечётность и записываем только числа, прошедшие проверку
}

А если число НЕ прошло проверку, что с ним делаем? Не записываем. Т.е. mass[i] в этом случае так и остается со своим прежним (мусорным) содержимым... Каковое затем и выводится.

Можно так:

int k = 0;
for (int i = 0; i < std::size(mass); i++) {
    if (pos[i] % 2 != 0) {
        mass[k++] = pos[i];
    } // Проверяем на нечётность и записываем только числа, прошедшие проверку
}

По окончании кода в k количество заполненных элементов массива mass.

Но вообще-то исходная задача решается так:

for(int i = 0; i < 50; ++i) mas[i] = i*2+1;
→ Ссылка