小弟我用c语言做了一个类似拼图的游戏(用数字代替图片)运行正常,但是如果同时按了两个键,或按快了就会非正常退出,求解决

我用c语言做了一个类似拼图的游戏(用数字代替图片)运行正常,但是如果同时按了两个键,或按快了就会非正常退出,求解决
原代码如下:
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <ctime>
#define N 3
int e[N][N];
void out()//输出游戏界面
{
int i,j;
for (i=0;i<N;i++)
{
printf("\n");
for(j=0;j<N;j++)
{
printf("%3d ",e[i][j]);
}
}
}
int win()//判断胜利
{
int i,j,k=0;
for (i=0;i<N-1;i++)
{
for(j=0;j<N;j++)
{
if (e[i][j]!=1+(k++))
{
return 0;
}
}
}
for (i=0;i<N-1;i++)
{
if (e[N-1][i]!=1+(k++))
{
return 0;
}
}
printf("\n恭喜,你赢了");
fflush(stdin);
getchar();
exit(0);
}
int abc(unsigned char a)//游戏操作
{
int i,j;
for (i=0;i<N;i++)
for(j=0;j<N;j++)
{
if (e[i][j]==NULL)
{
if (a==72)//方向向上
{
if (i<N-1)
{
e[i][j]=e[i+1][j];
e[i+1][j]=NULL;
goto r;
}
}
else if (a==80)//方向向下
{
if (i>0)
{
e[i][j]=e[i-1][j];
e[i-1][j]=NULL;
goto r;
}
}
else if (a==75)//方向向左
{
if (j<N-1)
{
e[i][j]=e[i][j+1];
e[i][j+1]=NULL;
goto r;
}
}
else if (a==77)//方向向右
{
if (j>0)
{
e[i][j]=e[i][j-1];
e[i][j-1]=NULL;
goto r;
}
}
}
}
r:
system("cls");
out();
win();
return 0;
}
int main()
{
unsigned char a;
int i,j,k=0,l=0,b,key=1;
for (i=0;i<N;i++)//预防判断胜负时出错
{
for(j=0;j<N;j++)
{
e[i][j]=N*N;
}
}
srand((unsigned)time(NULL));//取N*N以内的随机整数初始化界面,不可重复
for (i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
q:
b=rand()%(N*N);
for (k=0;k<N;k++)
{
for(l=0;l<N;l++)
{
if (b==e[k][l])
{
goto q;
}
}
}
e[i][j] = b;
}
}
out();//输出初始界面
while(!_kbhit())//当有键按下时判断键值
{
if (getch()==224)
{
a=getch();
abc(a);
}
}
}

------解决方案--------------------
C/C++ code
    while (1)//改成这个样子就好了,不过你还要测试下是否又引起了新的问题
    {
        while(_kbhit()!=0)
        {
            if (getch()==224)
            {
                a=getch();
                abc(a);
            }
        }    
    }