2017-04-13 43 views
-2

這是一個神奇的正方形問題,幻方n的大小應該作爲命令行參數輸入。 n必須是一個奇數。 The expected output should be like this.我的問題是,當我嘗試執行代碼, it generates a bunch of 0s.生成一個神奇的正方形

我是一個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; 
    } 
+0

決定使用哪種語言。你不能同時使用C和C++,它們是不同的語言。另外 - 你的調試器告訴你什麼? – Fureeish

+0

在給'n'分配一個新的值之後,把'magic [n + 1] [n + 1]'聲明爲'',因爲當'n'爲0時創建數組 – Rogus

+0

程序應該做什麼?只是通過目測,我發現你初始化了矩陣的維數1 1 – asddf

回答

-1

不能使用變量來聲明一個數組

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

的大小可以:

1)查找如何動態分配陣列,或

2 )使用載體

另外,我不認爲這正在造成一個問題,但

int n = atoi(argv[1]); 

不檢查,以確保的argv [1]包含數字字符,後來可能會引起問題爲您服務。

+2

'int magic [n + 1] [n + 1]'被稱爲*可變長度數組*。問題在於它的維數爲1. –

+1

你不能在C++中做到這一點。在C中它是完全合法的語法。看看OP如何改變標籤 – Fureeish

+0

@ Weather Vane - 我不認爲他們正在使用C99 – cOborski