r-ll-r 2023-01-23 17:47 采纳率: 75%
浏览 34
已结题

C语言用覆盖的方法来删除数组中的元素,为什么输入时没有成功,求解

#include <stdio.h>
#include <stdlib.h>
#define n 2
struct student
{
    long long num;
}stu[1000];
void backspace()//删除 
{
    int i,j,nn=n;
    printf("请输入要删除学生的学号:\n");
    long long N;
    scanf("%lld",&N);
    for(i=0;i<nn;i++)
    {
        if(stu[i].num==N)
        {
            for(j=i;j<nn-1;j++)
            {
                stu[j].num=stu[j+1].num;
            }
            nn--;
        }
    }
}
int main()
{
    int i;
    printf("请输入学号:");
    for(i=0;i<n;i++)
    {
        scanf("%lld",&stu[i].num);
    }
    backspace();
    for(i=0;i<n;i++)
    {
        printf("%lld",stu[i].num);
    }
}

运行结果如下:

img

  • 写回答

4条回答 默认 最新

  • a5156520 2023-01-23 18:58
    关注

    数组如果只有两个元素,而删除的元素为数组的最后一个元素,那么backspace()里的第二个for循环那里不会执行,然后nn--让数组长度减少一个不能对n的值产生效果,所以会导致删除失败;

    可以在这种情况下把最后一个数组元素用一个特定值来覆盖,如0;还有另外一种办法就是把n定义为全局变量,下面的例子采用第二种办法,修改如下:

    #include <stdio.h>
    #include <stdlib.h>
    // #define n 2
    int n=2;
    struct student
    {
        long long num;
    }stu[1000];
    void backspace()//删除 
    {
        int i,j,nn=n;
        printf("请输入要删除学生的学号:\n");
        long long N;
        scanf("%lld",&N);
        for(i=0;i<nn;i++)
        {
            if(stu[i].num==N)
            {
                for(j=i;j<nn-1;j++)
                {
                    stu[j].num=stu[j+1].num;
                }
                n--;
            }
        }
    }
    int main()
    {
        int i;
        printf("请输入学号:");
        for(i=0;i<n;i++)
        {
            scanf("%lld",&stu[i].num);
        }
        backspace();
        for(i=0;i<n;i++)
        {
            printf("%lld\n",stu[i].num);
        }
    }
     
    
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 2月1日
  • 已采纳回答 1月24日
  • 创建了问题 1月23日

悬赏问题

  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计