【问题标题】:Print two-dimensional array with a function [closed]使用函数打印二维数组[关闭]
【发布时间】:2016-08-07 12:57:09
【问题描述】:
void printBoard(int board[8][8])
{
int i,j;
for(i = 0; i<8; i++)
{
    for(j = 0; j<8; j++)
    {
        printf("%d ", board[i][j]);
    }
    printf("\n");
}
}

int main(){
int i, j;
    int board[8][8];

    for(i = 0; i<8; i++)
    {
        for(j = 0; j<8; j++)
        {
            scanf("%d", &board[i][j]);
        }
    }

 printBoard(board);

为什么下面的void函数不打印二维数组?它只是继续要求输入。我也试过不带这个功能,还是不行。

我们本来打算将此作为家庭作业的一部分。有人可以解释一下如何解决这个问题吗?

【问题讨论】:

  • 在主函数中,你有scanf,它将要求输入64次二维数组board[8][8]的所有元素
  • 你的程序有多少参数?
  • 不要使用 magic numbers (搜索它 - 在编程上下文中)。正如你所注意到的,它很容易出错。将维度的长度传递给函数并传递一个 VLA,而不是固定宽度的数组。或者坚持使用固定宽度的数组,但对尺寸使用类似常量的宏!你应该早在这个练习之前就已经学会了。如果不知道,请询问你的老师(如果他不知道,他是个坏老师)。

标签: c for-loop multidimensional-array


【解决方案1】:

您的main 正在循环通过scanf,这是一个要求用户输入64 次的函数。在到达printBoard() 语句之前,您需要输入 64 个值。

【讨论】:

    【解决方案2】:

    首先,您的 printBoard 函数不会打印所有数组。 当你修复这个问题时(函数 8 中的第一个循环而不是 2)你会得到你想要的,但我建议尝试更小的数组,因为你需要放置 64 个值。

    【讨论】:

      【解决方案3】:

      在嵌套循环中,每次执行外循环时,内循环都会执行完毕。这意味着scanf 将被调用 8 * 8 = 64 次。 scanf 从控制台接受输入,这意味着您必须在控制台中输入 64 个值才能打印出来。

      也许可以尝试将数组的大小从 8 * 8 减小到更易于管理的值,例如 3 * 3 或 4 * 4 - 这样您就不必花一两分钟的时间来输入数字来测试它.

      【讨论】:

        【解决方案4】:
        #include<stdio.h> 
        void printBoard(int board[8][8]);
        
        int main(){
        int i, j;
        int board[8][8];
        
             for(i = 0; i<8; i++)
             {
             for(j = 0; j<8; j++)
             {
                scanf("%d", &board[i][j]);
             }
         }
          return 0; 
        }
            void printBoard(int board[8][8])
              {
            int i,j;
          for(i = 0; i<8; i++)
          {
           for(j = 0; j<8; j++)
          {
            printf("%d ", board[i][j]);
         }
         printf("\n");
         }
          }
        

        在您的i for 循环中,它是行,j 循环是列,因此循环将是 8 行和 8 列,因此它将运行 64 次,然后需要 64 个输入,然后 scanf 将完成。

        【讨论】:

          【解决方案5】:

          所以我开始这样输入我的价值观:

          00000000 00100000 00001000 00001010 01010000 00020000 00000000 00000000

          这似乎不起作用。 然后,我尝试了:

          0 0 0 0 0 0 0 0

          0 0 1 0 0 0 0 0

          0 0 0 0 1 0 0 0

          0 0 0 0 1 0 1 0

          0 1 0 1 0 0 0 0

          0 0 0 2 0 0 0 0

          0 0 0 0 0 0 0 0

          0 0 0 0 0 0 0 0

          它奏效了。我猜它以这种方式计算了 64 个单独的值。 谢谢!

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2018-09-30
            • 1970-01-01
            • 1970-01-01
            • 2020-10-18
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-12-29
            相关资源
            最近更新 更多