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日

悬赏问题

  • ¥50 三种调度算法报错 有实例
  • ¥15 关于#python#的问题,请各位专家解答!
  • ¥200 询问:python实现大地主题正反算的程序设计,有偿
  • ¥15 smptlib使用465端口发送邮件失败
  • ¥200 总是报错,能帮助用python实现程序实现高斯正反算吗?有偿
  • ¥15 对于squad数据集的基于bert模型的微调
  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存
  • ¥15 CST保存项目时失败
  • ¥20 java在应用程序里获取不到扬声器设备