Не понимаю почему выводятся числа в консоли при выводе массива
Задача: заполнить массив из 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;