Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 在下面的程序中,(4*4)数组将被打印两次。为什么?_C_Multidimensional Array_Puzzle - Fatal编程技术网

C 在下面的程序中,(4*4)数组将被打印两次。为什么?

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

这是我用已经给我们的初始配置进行编程的第一步。在这里,我认为这个洞是数字0

我不明白为什么在按下箭头键后阵列会打印两次。我首先打印数组,然后根据输入的箭头键对其进行必要的更改,最后,如果生成的数组不是按升序进行的,我重复这些步骤。但根据这一点,它应该只打印一次。那么问题是什么呢

#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;i
ENTER
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