Как я могу напечатать многомерные массивы в C? - PullRequest
1 голос
/ 14 февраля 2020
#include <stdio.h>

int main(){

  int number[3][4] = {
    {10,20,30,40},
    {15,25,35,45},
    {47,48,49,50},
  };
      printf("%s",number[]);
  return 0;
}

Хорошо, вот мой код, и мне интересно, как я могу распечатать созданные мной массивы. Нужно ли использовать для l oop или есть другой способ?

PS: я новичок ie.

Ответы [ 3 ]

3 голосов
/ 14 февраля 2020

Использовать вложенные для циклов. Например,

for ( size_t i = 0; i < 3; i++ )
{
    for ( size_t j = 0; j < 4; j++ )
    {
        printf( "%2d ", number[i][j] );
    }
    putchar( '\n' );
}

Обратите внимание, что использование магических чисел c, таких как 3 и 4, является плохой идеей. Вместо этого используйте именованные константы.

Что касается спецификатора преобразования %s, то он используется для вывода одномерных символьных массивов, содержащих строки

Вот демонстрационная программа

#include <stdio.h>

int main(void) 
{
    enum { M = 3, N = 4 };
    int number[M][N] =
    {
        { 10, 20, 30, 40 },
        { 15, 25, 35, 45 },
        { 47, 48, 49, 50 },
    };

    for ( size_t i = 0; i < M; i++ )
    {
        for ( size_t j = 0; j < N; j++ )
        {
            printf( "%2d ", number[i][j] );
        }
        putchar( '\n' );
    }

    return 0;
}

Его вывод

10 20 30 40 
15 25 35 45 
47 48 49 50 

Чтобы вывести двумерный целочисленный массив в виде одномерного целочисленного массива, примените приведение к указателю массива к типу int * или const int *.

Например,

#include <stdio.h>

int main(void) 
{
    enum { M = 3, N = 4 };
    int number[M][N] =
    {
        { 10, 20, 30, 40 },
        { 15, 25, 35, 45 },
        { 47, 48, 49, 50 },
    };

    const int *p = ( const int * )number;

    for ( size_t i = 0; i < M * N; i++ )
    {
        printf( "%2d ", p[i] );
    }
    putchar( '\n' );

    return 0;
}

Выходные данные программы:

10 20 30 40 15 25 35 45 47 48 49 50 

И наоборот, для печати одномерного массива в виде двумерного массива используйте следующий подход.

#include <stdio.h>

int main(void) 
{
    enum { N = 12 };
    int number[N] = { 10, 20, 30, 40, 15, 25, 35, 45, 47, 48, 49, 50 };

    size_t rows = 3, cols = 4;

    for ( size_t i = 0; i < rows; i++ )
    {
        for ( size_t j = 0; j < cols; j++ )
        {
            printf( "%2d ", number[i * cols + j] );
        }
        putchar( '\n' );
    }           

    return 0;
}

Вывод программы:

10 20 30 40 
15 25 35 45 
47 48 49 50 
1 голос
/ 14 февраля 2020

Итак, с вашим кодом есть несколько проблем.

  1. Вам не хватает индекса массива в printf("%s",number[]);
  2. Вы используете неправильный спецификатор формата. Это должно быть %d, а не %s. %d не просто действует как заполнитель; он также сообщает C, как правильно преобразовать ваш номер в отображаемую форму.

Для печати массива вам понадобится вложенный for l oop. Ваша программа должна выглядеть примерно так:

int main(){

  int number[3][4] = {
    {10,20,30,40},
    {15,25,35,45},
    {47,48,49,50},
  };

  for (int i=0; i<3; i++) {
    for (int j=0; j<4; j++) {
      printf("%d ",number[i][j]);
    }
    printf("\n");
  }

  return 0;
}

https://repl.it/@robertwharvey / AffectionateWorseHashmaps

1 голос
/ 14 февраля 2020

%s ожидает, что строка с нулевым символом в конце char с. Вы распечатываете массивы, перебирая их:

for (i = 0; i < 3; i++)
{
    for (i2 = 0; i2 < 4; i2++)
    {
        printf("%d ", number[i][i2]);
    }

    putchar('\n');
}

Это помогает делать это в мажорном порядке строк , если производительность имеет значение.

...