定义长度20的int数组,键盘读入20个1位数写入数组。键盘再输入一个要删除的数,从数组中删除此数

#include<stdio.h>
#define N 20
int delnum(int p[],int n,int num);
int main()
{
    int a[N],num,len,i,seed;
    printf("Input 20 num:");
    for(i=0;i<20;i++)           //给数组N个元素赋值 
        scanf("%d",&a[i]);
    puts("========array========");
    for(i=0;i<N;i++)           //输出数组中所有数据 
        printf("%d ",a[i]);
    puts("");
    printf("Please input delete num:");
    scanf("%d",&num);
    len=delnum(a,N,num);         //调用函数,删除数组a中的num,返回剩余数据个数
    puts("========array========");
    for(i=0;i<len;i++)          //输出删除后的数组数据
        printf("%d ",a[i]);     //注意,这里只输出len个数据
    puts("");
    return 0;
}
int delnum(int a[20] , int n , int num)
{
	int x,y,z=20;
	for(x=0;x<20;x++)
	{
		if(a[x]==num)
		{
			for(y=x;y<z-1;y++)
			{
				a[y]=a[y+1];
			}
			z--;
			x--;
		}
	}
	return z;
}

在最后一个数据是要被删除的数时会出现死循环,求问如何解决?

比如:2 2 2 2 2 9 9 9 9 9 3 3 3 3 3 9 9 9 9 9删除9,程序不能正常运行

测试了一下,没有发现什么问题啊

你的测试数据样本是啥样的呢