【问题标题】:How can I print multidimensional arrays in C?如何在 C 中打印多维数组?
【发布时间】:2020-05-30 12:36:01
【问题描述】:
#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;
}

好的,这是我的代码,我想知道如何打印出我创建的那些数组。我必须使用 for 循环还是有其他方法?

P.S:我是新手。

【问题讨论】:

  • 你必须使用循环自己编写,就像使用一维数组一样。
  • 提示:你需要一个for 循环。也许两个。
  • 最好的方法是使用 2 个 for 循环,基本上一个用于列,另一个用于行。

标签: c arrays for-loop multidimensional-array printf


【解决方案1】:

使用嵌套的 for 循环。例如

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

请注意,使用34 之类的幻数是个坏主意。而是使用命名常量。

至于转换说明符%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 

【讨论】:

    【解决方案2】:

    所以你的代码有几个问题。

    1. printf("%s",number[]); 中缺少数组索引
    2. 您使用了错误的格式说明符。它应该是%d,而不是%s%d 不只是充当占位符;它还告诉 C 如何正确地将您的数字转换为可显示的形式。

    要打印数组,您需要一个嵌套的for 循环。您的程序应如下所示:

    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

    【讨论】:

      【解决方案3】:

      %s 需要一个以空字符结尾的 chars 字符串。您通过遍历它们来打印数组:

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

      如果性能很重要,在row-major order 中执行此操作会有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-08-31
        • 2020-10-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多