Неожиданный вывод при печати 2 массива (матрицы)

#arrays #c #loops

#массивы #c #петли

Вопрос:

вывод-печать только нескольких элементов матрицы, которые расположены в неправильном порядке , я думаю, что что-то не так с циклом печати, но не могу понять это

 #include lt;stdio.hgt;  int main() {  int x=0, y=0;  int a[x][y];  printf("enter the number of rows in first matrix:n");  scanf("%d", amp;x);  printf("enter the number of columns in first matrix:n");  scanf("%d", amp;y);  printf("enter elements of first matrixn");  for (int i = 0; i lt; x; i  )  {  for (int j = 0; j lt; y; j  )  {  printf("enter element %d %dn", i, j);  scanf("%d", amp;a[i][j]);  }  }  for (int p = 0; p lt; x; p  )  {  for (int q = 0; q lt; y; q  )  {  printf("%dt", a[p][q]);  }  printf("n");  }   return 0; }  

Комментарии:

1. Извините, почему вы называете свои переменные цикла p и q (или i и j ), а не лучше row и col , чтобы вы точно знали, что вы печатаете? Не только ваш код будет более удобным для обслуживания и читабельным, но вы, вероятно, увидите, что делаете.

2. @LuisColorado На самом деле, да, действительно хорошо понимать и визуализировать вещи намного лучше . Спасибо Вам за совет. Но вам нужна хорошая среда разработки, такая как VS-КОД, чтобы предложения с определенными переменными позволяли нам писать быстрее.

3. да, но проблема не в возможности записи, а в удобочитаемости, так как код обычно должен быть не только написан, но и поддерживаться (иногда каким-то другим человеком).

Ответ №1:

Вы объявляете матрицу перед получением размера матрицы (вы переменные x и y). В вашем коде матрица объявляется как[0][0].

Решение:

 #include lt;stdio.hgt;  int main() {  int x, y;  printf("enter the number of rows in first matrix:n");  scanf("%d", amp;x);  printf("enter the number of columns in first matrix:n");  scanf("%d", amp;y);  int a[x][y];  printf("enter elements of first matrixn");  for (int i = 0; i lt; x; i  ) {  for (int j = 0; j lt; y; j  ) {  printf("enter element %d %dn", i, j);  scanf("%d", amp;a[i][j]);  }  }  for (int p = 0; p lt; x; p  ) {  for (int q = 0; q lt; y; q  ) {  printf("%dt", a[p][q]);  }  printf("n");  }   return 0; }  

Комментарии:

1. но если я этого не сделал , то программа останавливается при вводе , попробуйте запустить один раз с и без инициализации x и y с 0

2. Да, вы должны иметь входные данные x и y, прежде чем инициализировать[x][y].

Ответ №2:

Вы инициализируете свой 2d-массив с 0 строками и 0 столбцами.
Тебе нужно int a[x][y] спуститься под scanf("%d", amp;y);

 #include lt;stdio.hgt;  int main() {  int x, y;  printf("enter the number of rows in first matrix:n");  scanf("%d", amp;x);  printf("enter the number of columns in first matrix:n");  scanf("%d", amp;y);  int a[x][y];  printf("enter elements of first matrixn");  for (int i = 0; i lt; x; i  ) {  for (int j = 0; j lt; y; j  ) {  printf("enter element %d %dn", i, j);  scanf("%d", amp;a[i][j]);  }  }  for (int p = 0; p lt; x; p  ) {  for (int q = 0; q lt; y; q  ) {  printf("%dt", a[p][q]);  }  printf("n");  }   return 0; }