2017-02-11 3 views
-1

Я только начинаю погружаться в 2D-массивы, и у меня возникают некоторые проблемы, почему мой вывод создает линию данных, а не размерную матрицу. Вся помощь приветствуется! Спасибо!!Ввод и печать 2D-массива

Мой код:

#include <stdio.h> 
#include <stdlib.h> 

int main() { 

int x, y, i, j; 
int m[10][10]; 


setvbuf(stdout, NULL, _IONBF, 0); 

while (1) { 
    printf("Number of rows? "); 
    scanf("%d", &x); 
    if (x == 0) 
     break; 
    printf("Number of columns? "); 
    scanf("%d", &y); 

    printf("Enter matrix values row by row: \n"); 
    for (i = 0; i < x; i++) { 
     for (j = 0; j < y; j++) { 
      scanf("%d", &(m[i][j])); 
     } 
    } 
printf("Matrix read:\n"); 
    for (i = 0; i < x; i++) { 
     for (j = 0; j < y; j++) { 
      printf("%d", m[i][j]); 
     } 
    } 

исчисленная данные:

Number of rows? 2 
Number of columns? 2 
Enter matrix values row by row: 
1 2 3 4 

Выход:

Matrix read: 
1234 

ответ

1

Чтобы выяснить, почему текущая программа печатает линии, пройти через цикл печати , и посмотрите на все точки, где вы печатаете значения.

Вы заметите, что это будет что-то вроде этого:

печать "1", печать "2", печать "3", печать "4".

Итак, программа просто делает это. Он печатает цифры без какого-либо другого «форматирования».

Вы можете сделать что-то вроде этого:

printf("Matrix read:\n"); 
for (i = 0; i < x; i++) { 
    for (j = 0; j < y; j++) { 
     printf("%d ", m[i][j]); 
    } 
    printf("\n"); 
} 

Обратите внимание, что есть пробел после номера в буквальном «% г». И затем обратите внимание, что новая строка печатается после каждого внутреннего for loop (что соответствует строке).

Примечание: Возможно, вы захотите использовать более описательные имена. Например: row вместо x и column вместо y.

+0

Большое вам спасибо! Это действительно помогло – cat

0

Ваша программа в порядке. Он также печатает матрицу в правильном порядке. Однако, если вы просто хотите отформатировать вывод в матричном формате, просто напечатайте «\ t» и «\ n» после внутреннего и внешнего циклов соответственно.

for (i = 0; i < x; i++) { 
    for (j = 0; j < y; j++) { 
     printf("%d\t", m[i][j]); 
    } 
    printf("\n"); 
}