Вывод массива функцией

Задача такова: Задать двумерный массив 10*6 и заполнить его целыми числами из диапазона [-1, 1]. Вывести на экран массив в прямоугольном виде. Вывести на экран массив в прямоугольном виде, так чтобы отображались только элементы, равные нулю. Использовать функцию заполнения массива и две функции вывода массива на экран.
Я написал код, но почему-то массив ломается и выводится неправильно.

#include <stdlib.h>
#define A -1
#define B 1
#define N 10
#define M 6
//
void random_z();
void print_mas1();
void random_z() {
    int i, j, mas[N][M];
    for (i = 0; i < N; i++) {
        for (j = 0; j < M; j++) {
            mas[i][j] = A + rand() % (B - A + 1);
        }
    }
}
//
void print_mas1() {
    int i, j, mas[N][M];
    for (i = 0; i < N; i++) {
        for (j = 0; j < M; j++) {
            printf("%5d", mas[i][j]);
        }
        printf("\n");
    }
}
//
void print_mas2() {
    int i, j, mas[N][M];
    char c = '+';
    for (i = 0; i < N; i++) {
        for (j = 0; j < M; j++) {
            if (mas[i][j] == 0) {
                printf("%5d", mas[i][j]);
            } else if ((mas[i][j] == 1) || (mas[i][j] == -1)) {
                printf("%5c", c);
            }
        }
        printf("\n");
    }
}
//
int main(void) {
    int i, j, mas[N][M];
    random_z();
    print_mas1();
    printf("\n");
    print_mas2();
    return 0;
}
``` <br>
Если в условии 2ой функции писать else if (mas[i][j] !=0), то вроде на взгляд выводит правильно, но съезжает на 1 значение, т.е все элементы съедут на 1 вправо, а первый(нулевой) появится из неоткуда. Подскажите, что не так, пожалуйста

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

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

Вы отдаете себе отчем, что массивы все разные? Что mas, объявленный в функции, только в ней и существует? Понимаете, Виктория в семье Ивановых, Виктория в семье Петровых и Виктория в семье Благодер — это три разные Виктории...

void random_z(int mas[N][M])
{
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < M; j++)
        {
            mas[i][j] = A + rand() % (B - A + 1);
        }
    }
}

void print_mas1(int mas[N][M])
{
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < M; j++)
        {
            printf("%5d", mas[i][j]);
        }
        printf("\n");
    }
}

void print_mas2(int mas[N][M])
{
    char c = '+';
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < M; j++)
        {
            if (mas[i][j] == 0)
            {
                printf("%5d", mas[i][j]);
            } else 
            {
                printf("%5c", c);
            }
        }
        printf("\n");
    }
}
//
int main(void) {
    int mas[N][M];
    random_z(mas);
    print_mas1(mas);
    printf("\n");
    print_mas2(mas);
}
→ Ссылка