You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言删除数组指定元素所有出现项的代码显示异常问题

数组删除指定元素所有出现项的代码问题修复

这段C语言代码原本是要删除数组中某个整数的所有出现项,但运行时会出问题:找到第一个匹配元素后,数组剩余部分显示异常。

原代码

unsigned int T[10], n, i, j, exist, integerDeleteOccurences;

printf("Array length : ");
scanf("%u", &n);

for(i=0; i<n; i++)
{
    printf("T[%u] : ", i);
    scanf("%u", &T[i]);
}

for(i=0; i<n; i++)
{
    printf("%u | ", T[i]);
}

printf("The number you want to delete its occurences : ");
scanf("%u", &integerDeleteOccurences);

exist = 0;

for (i=0; i<n; i++)
{
    if (T[i] == integerDeleteOccurences)
    {
        j = i;
        for (j=i; j<n-1; j++);
        {
            T[j] = T[j+1];
        }
        exist = 1;
        i--;
        n--;
    }
}

if (exist == 1)
{
    for (i=0; i<n; i++)
    {
        printf("%u | ", T[i]);
    }
}

else if (exist == 0)
{
    printf("This number doesn't exist in the array ! \n");
}

问题根源

核心错误是内层for循环后面多了一个分号;。这个分号会让for循环变成空循环,循环结束后j的值直接跳到n-1,之后花括号里的T[j] = T[j+1];只执行一次,仅仅把最后一个元素覆盖,并没有完成从i位置开始的所有后续元素前移操作,导致数组结构混乱,后续显示异常。

修复后的代码

只需要去掉内层for循环后的分号即可:

unsigned int T[10], n, i, j, exist, integerDeleteOccurences;

printf("Array length : ");
scanf("%u", &n);

for(i=0; i<n; i++)
{
    printf("T[%u] : ", i);
    scanf("%u", &T[i]);
}

for(i=0; i<n; i++)
{
    printf("%u | ", T[i]);
}

printf("The number you want to delete its occurences : ");
scanf("%u", &integerDeleteOccurences);

exist = 0;

for (i=0; i<n; i++)
{
    if (T[i] == integerDeleteOccurences)
    {
        j = i;
        // 去掉这里的分号
        for (j=i; j<n-1; j++)
        {
            T[j] = T[j+1];
        }
        exist = 1;
        i--;
        n--;
    }
}

if (exist == 1)
{
    for (i=0; i<n; i++)
    {
        printf("%u | ", T[i]);
    }
}

else if (exist == 0)
{
    printf("This number doesn't exist in the array ! \n");
}

修复说明

去掉分号后,花括号内的代码成为for循环的循环体,会从j=i开始,依次把T[j+1]的值赋给T[j],直到j到达n-2,完成所有后续元素的前移,这样就能正确删除匹配的元素,数组剩余部分也能正常显示。

内容的提问来源于stack exchange,提问作者Bacim OUESLATI

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 17:24:16