【问题标题】:How can I print an array like a grid?如何打印像网格一样的数组?
【发布时间】:2017-12-09 21:03:35
【问题描述】:

您好,我是编程新手,我需要像网格一样打印一个数组(必须是 1 维)。我现在尝试了几个小时,仍然没有我想要的结果。 该数组有 16 个值,所以网格会是这样的:

 ___________
|0 |1 |2 |3 |
|4 |5 |6 |7 |
|8 |9 |10|11|
|12|13|14|15|
–––––––––––––

我的代码:

#include <stdio.h>

void display_grid(void)
{
  int i;
  int j;
  int cell[16] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};

  for (i = 0; i < 4; i++)
    {
      printf("|");
      for (j = 0; j < 16; j++)
      {
        printf("%d|",cell[j]);
      }
        printf("\n");
    }
}

int main()
{
  display_grid();
  return 0;
}

显示这个:

|0|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|
|0|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|
|0|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|
|0|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|

【问题讨论】:

    标签: c arrays counter


    【解决方案1】:

    我觉得这会起作用:我将 cell[j] 更改为 cell[4 * i + j]

    #include <stdio.h>
    
    void display_grid(void)
    {
      int i;
      int j;
      int cell[16] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
    
      for (i = 0; i < 4; i++)
        {
          printf("|");
          for (j = 0; j < 4; j++)
          {
            printf("%d|",cell[4 * i + j]);
          }
            printf("\n");
        }
    }
    
    int main()
    {
      display_grid();
      return 0;
    }
    

    这有帮助吗?

    【讨论】:

      【解决方案2】:

      您可以使用余数运算符% 来确定何时在新行上打印。这是一个带有display_grid() 函数的示例程序,该函数将int 的数组、数组的大小和每行的所需大小作为参数。如果可以将数组平均划分为所需列数的行,则返回零。否则返回非零值。这允许您以各种网格格式显示一维数组;如果数组不能均分,则不打印任何内容。

      目前,这会打印包含最多 2 位数字(或 1 位数字和一个符号)的数字的网格。修改它以打印更多数字会很简单,或者需要进行更多修改以使显示宽度适合输入所需的最大宽度。

      #include <stdio.h>
      
      #define ARR_SZ  16
      
      int display_grid(int *arr, size_t arr_sz, size_t row_sz);
      
      int main(void)
      {
          int array[ARR_SZ];
          for (size_t i = 0; i < ARR_SZ; i++) {
              array[i] = i;
          }
      
          size_t row_sz = 4;
          if (display_grid(array, ARR_SZ, row_sz) != 0) {
              fprintf(stderr, "Array size not evenly divisible by %zu\n", row_sz);
          }
      
          row_sz = 8;
          if (display_grid(array, ARR_SZ, row_sz) != 0) {
              fprintf(stderr, "Array size not evenly divisible by %zu\n", row_sz);
          }
      
          row_sz = 2;
          if (display_grid(array, ARR_SZ, row_sz) != 0) {
              fprintf(stderr, "Array size not evenly divisible by %zu\n", row_sz);
          }
      
          row_sz = 1;
          if (display_grid(array, ARR_SZ, row_sz) != 0) {
              fprintf(stderr, "Array size not evenly divisible by %zu\n", row_sz);
          }
      
          row_sz = 16;
          if (display_grid(array, ARR_SZ, row_sz) != 0) {
              fprintf(stderr, "Array size not evenly divisible by %zu\n", row_sz);
          }
      
          row_sz = 6;
          if (display_grid(array, ARR_SZ, row_sz) != 0) {
              fprintf(stderr, "Array size not evenly divisible by %zu\n", row_sz);
          }
      
          row_sz = 32;
          if (display_grid(array, ARR_SZ, row_sz) != 0) {
              fprintf(stderr, "Array size not evenly divisible by %zu\n", row_sz);
          }
      
          return 0;
      }
      
      int display_grid(int *arr, size_t arr_sz, size_t row_sz)
      {
          int ret_val = arr_sz % row_sz;
      
          if (ret_val == 0) {
              /* Print top border */
              putchar(' ');
              for (size_t i = 1; i < 3 * row_sz; i++) {
                  putchar('_');
              }
              putchar('\n');
      
              /* Print rows of grid */
              for (size_t i = 0; i < arr_sz; i++) {
                  printf("|%-2d", arr[i]);
                  if ((i + 1) % row_sz == 0) {
                      printf("|\n");
                  }
              }
      
              /* Print bottom border */
              for (size_t i = 0; i < 3 * row_sz + 1; i++) {
                  putchar('-');
              }
              putchar('\n');
          }
      
          return ret_val;
      }
      

      程序输出:

       ___________
      |0 |1 |2 |3 |
      |4 |5 |6 |7 |
      |8 |9 |10|11|
      |12|13|14|15|
      -------------
       _______________________
      |0 |1 |2 |3 |4 |5 |6 |7 |
      |8 |9 |10|11|12|13|14|15|
      -------------------------
       _____
      |0 |1 |
      |2 |3 |
      |4 |5 |
      |6 |7 |
      |8 |9 |
      |10|11|
      |12|13|
      |14|15|
      -------
       __
      |0 |
      |1 |
      |2 |
      |3 |
      |4 |
      |5 |
      |6 |
      |7 |
      |8 |
      |9 |
      |10|
      |11|
      |12|
      |13|
      |14|
      |15|
      ----
       _______________________________________________
      |0 |1 |2 |3 |4 |5 |6 |7 |8 |9 |10|11|12|13|14|15|
      -------------------------------------------------
      Array size not evenly divisible by 6
      Array size not evenly divisible by 32
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-12-08
        • 2016-02-12
        • 1970-01-01
        • 2021-11-29
        • 1970-01-01
        • 2017-12-09
        • 1970-01-01
        • 2016-10-23
        相关资源
        最近更新 更多