C语言删除数组中的某一元素,并将该元素后的数据前移,为什么不对

这样输入a[0]=7,a[1]=8;
z=8;
a[1]中的元素没有消除,输出结果等于742;

img

img

你这个i=0时,没进if;
i=1时,a[i]==z进入if,然后进for内 j=i=1,那a[j]=a[j+1] 就是a[1]=a[2] 这没越界吗?

for循环里写的不对,肯定是越界了,再一个for里面的赋值什么意思?用笔画下,自己再看看

数组的长度值需是动态变化的,修改如下,供参考:

#include <stdio.h>
#define N 2
int main()
{
    int i, j, z, n = N;
    int a[N];
    for (i = 0; i < n; i++)
        scanf("%d", &a[i]);
    scanf("%d", &z);
    for (i = 0; i < n; i++)
    {
        if (a[i] == z)
        {
            for (j = i; j < n - 1; j++)
                a[j] = a[j + 1];
            n--;
        }
    }
    for (i = 0; i < n; i++)
        printf("%d", a[i]);
    return 0;
}