выводится мусор при поиске элементов в рандомной матрицу
Не могу разобраться.. Почему, когда я ищу элементы, которые делятся на сумму индексов и не делятся на 5, мне выводится какой-то мусор. Такой алгоритм работает с матрицей, ели бы я вводил ее с консоли, а вот с рандомной нет. Благодарю за объяснение заранее!
#include <stdio.h>
#include <math.h>
#include "color.h"
#include <stdlib.h>
#include <time.h>
main()
{
time_t t;
srand(time(&t));
int c[10][10], b[10], n, i, j;
do
n = rand() % 10;
while (n < 2 || n > 5);
printf("n=%i\n", n);
for (i = 0; i < n; i++, puts(""))
for (j = 0; j < n; j++)
{
printf("%4i", c[i][j] = rand() % 7 - 1);
puts("");
}
for (i = 0; i < n; i++, puts(""))
for (j = 0; j < n; j++)
{
if (c[i][j] < 0)
SetColor(12);
else if (c[i][j] == 0)
SetColor(9);
else
SetColor(15);
printf("%4i", c[i][j]);
}
for (i = 0; i < n; i++, puts(""))
for (j = 0; j < n; j++)
{
if (((i + j) != 0) && ((c[i][j] % (i + j)) == 0) && (c[i][j] % 5 != 0))
{
b[j] = c[i][j];
}
}
printf("\nelementi kotorie deleatsea na summu indexov i ne deletsea na 5:\n");
for (i = 0; i < n; i++)
{
printf("%4i", b[i]);
}
}
Ответы (2 шт):
Мусор выводится по той причине, что у Вас не инициализирован массив b. И потому, что количество присвоенных значений у массива b меньше, чем текущее n. Более того, Вы заполняете массив b не подряд (если хотите заполнять подряд, то для массива b стоило бы добавить свой индекс (счетчик)).
Возможный вариант решения проблемы: задаете еще одну переменную (инициализируете нулем, раз мы хотим ее использовать как индекс для b)
int count=0;
...
// внутри циклов пользетесь для массива b новым индексом и сразу увеличиваете
b[count++] = c[i][j];
...
// выводите в цикле до count
for (i = 0; i < count; i++)
{
printf("%4i\n", b[i]);
}
В данной задаче использование вспомогательного массива излишне.
Предлагаю вот эту часть кода
if (((i + j) != 0) && ((c[i][j] % (i + j)) == 0) && (c[i][j] % 5 != 0))
{
b[j] = c[i][j];
}
заменить на
if (((i + j) != 0) && ((c[i][j] % (i + j)) == 0) && (c[i][j] % 5 != 0))
{
printf("%4i", c[i][j]);
}