У вас есть несколько моментов, которые требуют немного больше внимания;
1) читать предупреждения и сообщения об ошибках, выданные вашим компилятором
2) еще раз, прочитайте предупреждающие сообщения от вашего компилятора
3) используйте отступы, чтобы сделать ваш код более читабельным.
4) Всегда возвращайтесь с main()
, это хорошая практика
Код ниже делает то, что вы хотите достичь; взгляните на это и продолжайте читать ...
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
// You either have to declare your functions
// or implement them before main()
void declaration(int a,int b, int m[a][b]);
void printing(int a,int b, int m[a][b]);
int main(){ // always return from main()
int m,n;
printf("type 2 numbers:");
scanf("%i %i",&m,&n);
int matrix[m][n];
declaration(m, n, matrix);
printing(m, n, matrix);
return 0;
}
void declaration(int a,int b, int m[a][b]){
srand(time(NULL));
int i,j;
for(i=0;i<a;i++){
for(j=0;j<b;j++){
m[i][j]=1+rand()%7;
}
}
}
void printing(int a,int b, int m[a][b]){
int i,j;
for(i=0;i<a;i++){
for(j=0;j<b;j++){
printf("%i\t",m[i][j]);
}
printf("\n");
}
}
Вам нужен способ передачи данных из одной функции в другую. Вы не можете просто объявить переменную auto
в одной функции и передать ее другой, как вы это делали в коде ниже
declaration(m,n);
printing(matrix,m,n); /* where does matrix[][] come from? */
запомните, C - это строго типизированный язык, что означает, что вы должны объявлять свои переменные перед их использованием. Это относится и к вашим функциям. Вы должны либо дать объявления своей функции до main()
(или, точнее, перед их использованием), либо реализовать их.
Просмотрите ваши заголовочные файлы (т.е. файлы .h), и вы увидите множество объявлений функций.
Поскольку вы используете массивы переменной длины, убедитесь, что ваш компилятор хотя бы способен компилировать код, соответствующий стандарту C99.
Некоторые дополнения;
Обычно C передает аргументы по значению, и вам нужно использовать указатель, если вы хотите, чтобы значение вашей переменной было изменено внутри функции. Если вы внимательно посмотрите на фрагмент кода, который я дал, я просто использовал int m[a][b]
. В C имя массива является указателем на его первый элемент, поэтому вы можете изменить значение элементов массива, когда собственно имя массива передается вашей функции в качестве аргумента.
Для дальнейшего чтения вы можете посмотреть
- переменная область действия
- глобальные переменные (вы можете определить матрицу [] [] как глобальную переменную и изменить значение матричных элементов)
- декларация против определения в C