-2

这是一个幻方问题,幻方 n 的大小应作为命令行参数输入。n 必须是奇数。 预期的输出应该是这样的。我的问题是,当我尝试执行代码时, 它会生成一堆 0。

我是 C 初学者,我希望有人可以帮助我解决我的问题。非常感谢!我感谢您的帮助!

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

int main(int argc, char *argv[])
{
    int n = atoi(argv[1]);
    int magic[n+1][n+1];
     if(argc == 2) 
        {
         for(int i = 0; i < n; i++) 
         {
            for(int j = 0; j < n; j++) 
            {
              magic[i][j] = 0;
            }
          }

          int i =0 ;//row
          int j= n / 2; //column

          for ( int k = 1; k <= n*n; k++ )
          {
             magic[j][i] = k;

             if(magic[j][i] == 0) //if the spot is empty
             {
                 if (j == 0 && i == 0)
                 {
                     j--;//go up one level
                     i--; //go left
                 }

                 else
                 {
                     if(j == 0) //if it's on the first row
                        j = n - 1;
                     else
                        j--;

                     if (i == 0) //if it's on the left column
                         i = n - 1;
                     else
                         i--;
                  }
              }

              else //if the spot is not empty
              {
                  j = j + 2;
                  i++;
              }
      }
  }


    for(int x=0; x<n; x++)
          {
             for(int y=0; y<n; y++)
                 printf("%3d", magic[x][y]);
             printf("\n");
          }

          return 0;
    }
4

1 回答 1

-1

您不能使用变量来声明数组的大小

 int magic[n+1][n+1];

你可以:

1)查找如何动态分配数组,或

2) 使用向量

另外,我认为这现在不会引起问题,但是

int n = atoi(argv[1]);

不检查以确保 argv[1] 包含可能在以后给您带来问题的数字字符。

于 2017-04-13T18:50:44.617 回答