推箱子,为什么输入第一个字符(w,a,s,d)的时候S可以正常动,再输入就只显示输入的字符了(字符数组复制过来变形了)

#include<stdio.h>
#include<stdlib.h>
int main()
{
char k[7][11]={"##########",
"## ###",
"##O### #",

"# S O O #",
"# # O ##",
"##
# ##",
"##########"};
int i,x=3,y=2;
char q;
for(i=0;i<7;i++)
puts(k[i]);

while(1)
{
    q=getch();
    system("cls");
    if(q=='w')
    {
        if(k[x-1][y]==' '||k[x-1][y]=='*')
        {
            k[x][y]=' ';
            x--;
            k[x][y]='S';
        }
        else if((k[x-1][y]=='O'||k[x-1][y]=='@')&&(k[x-2][y]==' '||k[x-2][y]=='*'))
        {
            k[x][y]=' ';
            x--;
            k[x][y]='S';
            k[x-1][y]='O';
        }
    }
    if(q=='s')
    {
        if(k[x+1][y]==' '||k[x+1][y]=='*')
        {
            k[x][y]=' ';
            x++;
            k[x][y]='S';
        }
        else if((k[x+1][y]=='O'||k[x+1][y]=='@')&&(k[x+2][y]==' '||k[x+2][y]=='*'))
        {
            k[x][y]=' ';
            x++;
            k[x][y]='S';
            k[x+1][y]='O';
        }
    }
    if(q=='a')
    {
        if(k[x][y-1]==' '||k[x][y-1]=='*')
        {
            k[x][y]=' ';
            y--;
            k[x][y]='S';
        }
        else if((k[x][y-1]=='O'||k[x][y-1]=='@')&&(k[x][y-2]==' '||k[x][y-2]=='*'))
        {
            k[x][y]=' ';
            y--;
            k[x][y]='S';
            k[x][y-1]='O';
        }
    }
    if(q=='d')
    {
        if(k[x][y+1]==' '||k[x][y+1]=='*')
        {
            k[x][y]=' ';
            y++;
            k[x][y]='S';
        }
        else if((k[x][y+1]=='O'||k[x][y+1]=='@')&&(k[x][y+2]==' '||k[x][y+2]=='*'))
        {
            k[x][y]=' ';
            y++;
            k[x][y]='S';
            k[x][y+1]='O';
        }
    }
    if(k[4][2]=='O')
        k[4][2]='@';
    if(k[4][3]=='O')
        k[4][3]='@';
    if(k[5][2]=='O')
        k[5][2]='@';
    if(k[5][3]=='O')
        k[5][3]='@';      
    if(k[4][2]!='S'&&k[4][2]!='@')
        k[4][2]='*';
    if(k[4][3]!='S'&&k[4][3]!='@')
        k[4][3]='*'; 
    if(k[5][2]!='S'&&k[5][2]!='@')
        k[5][2]='*';
    if(k[5][3]!='S'&&k[5][3]!='@')
        k[5][3]='*'; 
    for(i=0;i<7;i++)
        puts(k[i]);
    getchar();
    if(k[4][2]=='@'&&k[4][3]=='@'&&k[5][2]=='@'&&k[5][3]=='@')
    {    
        printf("good");
        break;
    }
}
system("pause");
return 0;
        

}

img

getchar();

干什么的
为什么要有这个代码?
这不是让用户输入一串字符串,以回车结束吗,它可不就显示出来了