C 在下面的程序中,(4*4)数组将被打印两次。为什么?
这是我用已经给我们的初始配置进行编程的第一步。在这里,我认为这个洞是数字0 我不明白为什么在按下箭头键后阵列会打印两次。我首先打印数组,然后根据输入的箭头键对其进行必要的更改,最后,如果生成的数组不是按升序进行的,我重复这些步骤。但根据这一点,它应该只打印一次。那么问题是什么呢C 在下面的程序中,(4*4)数组将被打印两次。为什么?,c,multidimensional-array,puzzle,C,Multidimensional Array,Puzzle,这是我用已经给我们的初始配置进行编程的第一步。在这里,我认为这个洞是数字0 我不明白为什么在按下箭头键后阵列会打印两次。我首先打印数组,然后根据输入的箭头键对其进行必要的更改,最后,如果生成的数组不是按升序进行的,我重复这些步骤。但根据这一点,它应该只打印一次。那么问题是什么呢 #include<stdio.h> #include<stdlib.h> void print(int x[][4],int,int); void func(int z[][4],int*,int
#include<stdio.h>
#include<stdlib.h>
void print(int x[][4],int,int);
void func(int z[][4],int*,int,int*,int);
void main()
{
int a[4][4]={1, 4,15, 7,
8, 10, 2,11,
14, 3, 6,13,
12, 9, 5, 0 };
int b[4][4];
int n,temp,i,j,x_coord=3,y_coord=3,count=0;
while(count!=15)
{
print(a,4,4);
count=0;
n=getch();
if(n=='H')
{
if(x_coord!=3)
func(a,&x_coord,1,&y_coord,0);
else
printf("\nWrong move!\n");
}
if(n=='P')
{
if(x_coord!=0)
func(a,&x_coord,-1,&y_coord,0);
else
printf("\nWrong move!\n");
}
if(n=='K')
{
if(y_coord!=3)
func(a,&x_coord,0,&y_coord,1);
else
printf("\nWrong move!\n");
}
if(n=='M')
{
if(y_coord!=0)
func(a,&x_coord,0,&y_coord,-1);
else
printf("\nWrong move!\n");
}
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
b[i][j]=a[i][j];
}
}
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
if(b[i][j]==0)
{
temp=b[i][j];
b[i][j]=b[3][3];
b[3][3]=temp;
}
}
}
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
if(i==4&&j==4)
continue;
if(b[i][j]==4*i+j+1)
count++;
}
}
}
}
void print(int x[][4],int r,int c)
{
int i,j;
for(i=0;i<r;i++)
{
for(j=0;j<c;j++)
printf("%d ",x[i][j]);
printf("\n\n");
}
}
void func(int z[][4],int *x,int x1,int *y,int y1)
{
z[*x][*y]=z[*x+x1][*y+y1];
z[*x+x1][*y+y1]=0;
*x=*x+x1;
*y=*y+y1;
}
#包括
#包括
无效打印(整数x[][4],整数,整数);
void func(int z[][4],int*,int,int*,int);
void main()
{
int a[4][4]={1,4,15,7,
8, 10, 2,11,
14, 3, 6,13,
12, 9, 5, 0 };
int b[4][4];;
int n,temp,i,j,x_坐标=3,y_坐标=3,计数=0;
而(计数!=15)
{
印刷品(a,4,4);
计数=0;
n=getch();
如果(n='H')
{
如果(x_坐标!=3)
func(a,&x_-coord,1,&y_-coord,0);
其他的
printf(“\n移动!\n”);
}
如果(n=='P')
{
如果(x_坐标!=0)
func(a,&x_-coord,-1,&y_-coord,0);
其他的
printf(“\n移动!\n”);
}
如果(n=='K')
{
如果(y_坐标!=3)
func(a,x,0,y,1);
其他的
printf(“\n移动!\n”);
}
如果(n=='M')
{
如果(y_坐标!=0)
func(a,&x_-coord,0,&y_-coord,-1);
其他的
printf(“\n移动!\n”);
}
对于(i=0;iENTER
maybe?只是猜测,没有阅读代码。旁注与问题无关:主函数的签名不应该是void main()
,而应该是int main(void)
。应用一致的缩进。这将帮助您分析逻辑结构。使用该缩进可以将几个if
更改为完整的if
else if
结构。在最后一个else
中输出一个“意外输入”除此之外,在我上面提供的链接中应用有用的提示。if(I==4&&j==4)
在for
循环中不可能是真的,使用i<4
和j<4
输入可能?只是猜测,没有阅读代码。旁注与问题无关:主函数的签名不应该是void main()
,而应该是int main(void)
。应用一致的缩进。这将帮助您分析逻辑结构。使用该缩进可以将几个if
更改为完整的if
else if
结构。在最后一个else
中输出一个“意外输入”然后输出输入。除此之外,在我上面提供的链接中应用有用的提示。if(I==4&&j==4)
在for
循环中不能为true,其中I<4
和j<4
。