C语言求帮忙检查下错误!!!

编写函数int delnum(int a[ ] , int n , int num),实现在长度是n的数组a中,删除值为num的元素。删除后数组的中剩余数据的个数作为函数的返回值返回。注意,num在数组中可能不只一个。
从数据中删除一个数,所做的操作是该元素后面的数据全部前移一个存储位置。例如:
长度为10的数组中存储10个数据:2,2,5,8,3,1,4,7,9,2,删除2,则数组中剩余有效数据长度为8,依次为5,8,3,1,4,7,9

#include
#include
#define N 20
int delnum(int p[],int n,int num)
{
int nlen,i,j;
nlen=n;
for(i=0;i<nlen;i++)
{

    if(p[i]==num)
    {
        for(j=i;j<nlen;j++)
        p[j]=p[j+1];
        nlen--;
    }
}
return nlen;

}
int main()
{
int a[N],num,len,i;

for(i=0;i<N;i++)          
    printf("%d ",a[i]);
puts("");
printf("Please input delete num:");
scanf("%d",&num);         
len=delnum(a,N,num);      
for(i=0;i<len;i++)        
    printf("%d ",a[i]);    
puts("");
return 0;

}

图片说明

你的数组都还没有初始化,你在main函数里就把它输出了,
#include
#define N 10
int delnum(int p[], int n, int num)
{
int nlen, i, j;
nlen = n;
for (i = 0; i<nlen; i++)
{
if (p[i] == num)
{
for (j = i; j < nlen; j++)
{
p[j] = p[j + 1];
}
nlen--;
i = -1; //使循环从i=0开始
}
}
return nlen;
}

int main()
{
int a[N], num, len, i;
for (i = 0; i<N; i++)
scanf("%d ", a[i]);
puts("");
printf("Please input delete num:");
scanf("%d", &num);
len = delnum(a, N, num);
for (i = 0; i<len; i++)
printf("%d ", a[i]);
puts("");
return 0;
}

 int delnum(int p[], int n, int num)
{   
    int *pData = new int[n];
    pData = p;
    int nLen = 0;
    for (int i = 0;i < n;i ++)
    {
        if (p[i] != num)
        {           
            p[nLen ++] = pData[i];
        }
    }   
    return nLen;
}

减少for循环次数的写法。。。