2016-10-11 12 views
0

私は、ユーザーが1から99までの奇数を入力し、正常に実行した魔方陣を作成したプログラムを作成しました。配列の再計算

#include <stdio.h> 

int main() 
{ 
    int n; 

    printf("\nThis programs creates a magic squares of a specified size.\n"); 
    printf("The size must be an odd number between 1 and 99.\n"); 
    printf("Enter the size of magic square: "); 
    scanf("%d", &n); 


    int magicsq[99][99]; 

    int row = 0; 
    int col = (n - 1)/2; 
    magicsq[row][col] = 1; 

    int i;  
    for(i = 2; i <= n * n; i++) 
    { 
     row = (row + n - 1) % n; 

     /* printf("i = %d\n", i); 
     printf("row %d\n", row); 

     col = (col % n); */ 
     col = (col + 1) % n; 

     /* printf("col %d\n\n", col); */ 

     if(magicsq[row][col] != 0) 
    { 
     row = (n + row + 2) % n; 
     col = (n + col - 1) % n; 
     /* printf("n = %d ; row = %d ; col = %d\n", n, row, col); */ 
    } 

     magicsq[row][col] = i; 
    } 




    printf("\n"); 
    int j;  
    for (i = 0; i < n; i++) 
    {              
     for (j = 0; j < n; j++) 
    {             
     printf("%5d", magicsq[i][j]);           
    }                  
     printf("\n");                
    }                   
    return 0;                  
} 

私はすなわち、void create_magic_square(int n, char magic_square[99][99])とコンパイル時に

#include <stdio.h> 


void create_magic_square(int n, char magic_square[99][99]); 
void print_magic_square(int n, char magic_square[99][99]); 

int main() 
{ 
    int n; 
    char **magic_square; 

    printf("\nThis programs creates a magic squares of a specified size.\n"); 
    printf("The size must be an odd number between 1 and 99.\n"); 
    printf("Enter the size of magic square: "); 
    scanf("%d", &n); 

    create_magic_square(n, magic_square[99][99]); 
    print_magic_square(n, magic_square[99][99]); 

    return 0; 
} 

void create_magic_square(int n, char magic_square[99][99]) 
{ 

    int *magicsq[][]; 
    magic_square[99][99] = magicsq[][]; 
    int row = 0; 
    int col = (n - 1)/2; 
    magicsq[row][col] = 1; 

    int i;  
    for(i = 2; i <= n * n; i++) 
    { 
     row = (row + n - 1) % n; 

     printf("i = %d\n", i); 
     printf("row %d\n", row); 

     /* col = (col % n); */ 
     col = (col + 1) % n; 

     printf("col %d\n\n", col); 

     if(magicsq[row][col] != 0) 
    { 
     row = (n + row + 2) % n; 
     col = (n + col - 1) % n; 
     printf("n = %d ; row = %d ; col = %d\n", n, row, col); 
    } 

     magicsq[row][col] = i; 
    } 
} 



void print_magic_square(int n, char magic_square[99][99]) 
{  
    printf("\n"); 
    int j;  
    for (i = 0; i < n; i++) 
    {              
     for (j = 0; j < n; j++) 
    {             
     printf("%5d", magicsq[i][j]);           
    }                  
     printf("\n");                
    } 
} 

void print_magic_square(int n, char magic_square[99][99])、私は私のchar型配列の宣言と上のエラーのトンで満たされています二つの機能を紹介するために私を述べた別の質問に出くわした私パラメータの使用。私はchar()のパラメータとタイプをgoogledしましたが、自分のプログラムに組み込むことはできません。

私は建設的な批判が高く評価され、私が何か悪いことをしているなら私がより良く学ぶのに役立つので、私は新しいです。

言語:c99;コンパイラ:gcc

+1

エラーと警告を読みます。彼らを理解する –

+2

Ps。太陽の下であらゆる警告を発行するコンパイラを取得する –

+6

最初に知っておくべきことは、Cに配列型のパラメータがないことです。パラメータ 'magic_square'は実際にはポインタです。これは: 'magic_square [99] [99] = magicsq [] [];'あなたが意図したことを私が言うことができないほど無意味です。 [comp.lang.c FAQ](http://www.c-faq.com/)のセクション6を読んでください。 Cの配列とポインタの関係は混乱することがあります。 –

答えて

0

もちろん、ポインタや配列に関連するコードには多くの間違いがあり、ここでは1つの答えで完全に説明することはできません。 ポインタを正しく調べることをお勧めします。ポインタと配列の関係多次元配列は、あなたがしようとしていることを試みる前に完全に理解する必要があります。