@Jolek

Как с помощью функции напечатать двухмерный массив?

Почему выводит только первую строку а остальные что-то непонятное?
#include <stdio.h>
#include <stdlib.h>

 int print_arr(int str, int stlb, int matr[][stlb]){
 	int k, i;
 	for(k = 0; k < str; k++){
    for(i = 0; i < stlb; i++){
    printf("%d\t", matr[k][i]);
	}
    printf("\n");	
}
}

int  main()
{
	int L = 0, N = 0, k, i;
    int mass[10][10];
    scanf("%d", &N);
    L=N;
    for(k = 0; k < N; k++){
    printf("[%d]\n", k);
    for(i = 0; i < L; i++){
    	scanf("%d", &mass[k][i]);
	}
}
    printf("matrix NxN\n");
    print_arr(N, L, &mass[k][i]);
	return 0;
}
  • Вопрос задан
  • 79 просмотров
Пригласить эксперта
Ответы на вопрос 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Почему выводит только первую строку а остальные что-то непонятное?

int print_arr(int str, int stlb, int matr[][stlb]){
...
}

int mass[10][10];
...
print_arr(N, L, &mass[k][i]);


Здесь две ошибки:
- во-первых ты пообещал, что передашь в print_arr массив, последняя размерность которого равна второму параметру функции, а передаёшь массив, вторая размерность которого равна 10 и никак от второго параметра не зависит
- во-вторых вместо массива ты передаёшь адрес элемента, который ты даже не заполнил.

Если уж ты решил использовать VLA, то делай это последовательно, например так:

int  main()
{
    int L = 0, N = 0, k, i;
    scanf("%d", &N);
    L=N;
    int mass[N][L];
    for(k = 0; k < N; k++){
        printf("[%d]\n", k);
        for(i = 0; i < L; i++){
    	    scanf("%d", &mass[k][i]);
        }
    }
    printf("matrix NxN\n");
    print_arr(N, L, mass);
    return 0;
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы