以下のプログラムは、edxのハーバードcs50コースの一部として、ユーザーが入力した寸法に基づいて正方形のグリッドグリッドを印刷することを目的としています。2D配列要素が設定後に変更される
アレイは正しく初期化されていますが、印刷するときは最後の列が常に正しく印刷されません。私は2つのprintf文をinit()関数の最も内側のforループに入れてデバッグを試みました。 一番外側のループが1回実行された後、直前の列のエントリは1だけ減っているように見えますが、直前には正しくなっています。
どうしてですか?正しく印刷してはいけませんか?
#include <stdio.h>
main()
{
void init(int dim, int arr[dim-1][dim-1]);
int dim;
printf("Enter board dimension(max 10): ");
scanf("%d", &dim);
int arr[dim-1][dim-1];
init(dim, arr);
int i,j;
for(i=0;i<dim;i++)
{
for(j=0;j<dim;j++)
{
printf("%2d ",arr[i][j]);
}
printf("\n");
}
}
void init(int dim, int arr[dim-1][dim-1])
{
int i,j,p;
for(i=0;i<dim;i++)
{
for(j=0;j<dim;j++)
{
arr[i][j] = (dim*dim-1)-i*dim-j;
}
for(p=0;p<dim;p++)
{
printf("%d ", arr[i][p]);
if(i>=1)
printf("%d ", arr[i-1][p]);
}
}
printf("\n");
if(dim%2==0)
{
arr[dim-1][dim-3] = 1;
arr[dim-1][dim-2] = 2;
}
}
EDIT:それは今
は、なぜあなたは 'のボイドのinit(int型薄暗い、int型ARR [DIM-1] [DIM-1])を宣言します;'で 'main'機能を? –
コンパイルされません。メインに 'i
cleblanc
あなたは 'void init(int dim、int arr [dim-1] [dim-1]);'の前に 'main'を宣言する必要があります –