绅士羊 2023-05-25 17:21 采纳率: 78.6%
浏览 47
已结题

c语言文件特定位置的信息删除

我已经有一个学生信息文本
在这里我想理由文件打开方式的“w"方式进行删除某一个学生的信息,程序运行正常,但是文本内容并没有改变,
恳请指点指点我哪里错了,我已经很努力的调试了,但仍没有成效。

struct score
{
    char id[8];
    char name[11];
    float gaoshu;
    float lisan;
    float luoji;
    float gpa_gaoshu;
    float gpa_lisan;
    float gpa_luoji;
    float gpa;
    int rank;//排名 
};
 int cancle(int n)
{
    struct score st[100];
    struct score sub[99];
    char id[8];
    int find=0;
    printf("请输入你要删除的学生学号:"); 
    scanf("%s", &id);
    FILE *fp;
    fp=fopen("学生成绩管理2.txt","r");
    if(fp==NULL)
    {
        printf("打开文件失败,请联系管理员\n");
        getch(); 
        return -1;   
    }
    int c=0;
    int index=0;//用于记录目标序号 
    while(!feof(fp))
    { 
        fscanf(fp,"%s %s %f %f %f %f %f %f %f %d\n",st[c].id,st[c].name,st[c].gaoshu,st[c].lisan,st[c].luoji,st[c].gpa_gaoshu,st[c].gpa_lisan,st[c].gpa_luoji,st[c].gpa,st[c].rank);
        if(strcmp(id,st[c].id)==0)
        {
            find = 1;
            index = c;
        } 
        c++;
    }
    fclose(fp);
    if(n==0)
    {
        printf("已经没有学生成绩信息了,请按任意键返回\n");
        getch();  
        showmenu();
        return n;
    }
    if(find==0)
    {
        printf("没有该学生成绩信息,请按任意键返回\n");
        getch();  
        showmenu();
        return n;
    }
    else 
    {
        int i;
        //删除 
        for(i=0;i<c;i++)
        {
            if(i < index)
            {
                sub[i] = st[i];
            }
            else
            {
                sub[i] = st[i+1];
            }
        }
        FILE *fp2;
        fp2=fopen("学生成绩管理3.txt","w");
    
        for(i=0;i<c-1;i++)
        {
            fprintf(fp2,"%s %s %f %f %f %f %f %f %f %d\n",sub[i].id,sub[i].name,sub[i].gaoshu,sub[i].lisan,sub[i].luoji,sub[i].gpa_gaoshu,sub[i].gpa_lisan,sub[i].gpa_luoji,sub[i].gpa,sub[i].rank);     
        } 
        fclose(fp2);
        printf("学号为%s的学生成绩删除成功,请按任意键返回\n",id);
        getch();
        showmenu();
        return n-1;
    }     
}

我的文本格式
1001 leo 100.00 100.00 100.00 64.00 64.00 64.00 192.00 0
1002 mary 99.00 99.00 99.00 63.90 63.90 63.90 191.70 0
1003 erin 60.00 60.00 60.00 0.00 0.00 0.00 0.00 0
1004 dennle 80.00 80.00 80.00 62.00 62.00 62.00 186.00 0
1005 kin 20.00 90.00 70.00 0.00 63.00 61.00 124.00 0
1006 bore 90.00 80.00 50.00 63.00 62.00 0.00 125.00 0
1007 wake 80.00 80.00 90.00 62.00 62.00 63.00 187.00 0
1008 cid 78.00 76.00 88.00 61.80 61.60 62.80 186.20 0
1009 cold 87.00 78.00 86.00 62.70 61.80 62.60 187.10 0
1010 summy 76.00 65.00 45.00 61.60 60.50 0.00 122.10 0
1011 hot 60.00 60.00 60.00 0.00 0.00 0.00 0.00 0
1012 cool 59.00 50.00 50.00 0.00 0.00 0.00 0.00 0
1013 hand 80.00 10.00 78.00 62.00 0.00 61.80 123.80 0
1014 rool 80.00 30.00 40.00 62.00 0.00 0.00 62.00 0
1015 roof 78.00 57.00 87.00 61.80 0.00 62.70 124.50 0
1016 wave 87.00 77.00 66.00 62.70 61.70 60.60 185.00 0
1017 like 99.00 77.00 77.00 63.90 61.70 61.70 187.30 0
1018 heud 28.00 88.00 76.00 0.00 62.80 61.60 124.40 0
1019 tghde 76.00 80.00 20.00 61.60 62.00 0.00 123.60 0
1020 yehdy 77.00 77.00 66.00 61.70 61.70 60.60 184.00 0

  • 写回答

4条回答 默认 最新

查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 6月2日
  • 已采纳回答 5月25日
  • 修改了问题 5月25日
  • 创建了问题 5月25日

悬赏问题

  • ¥20 Wpf Datarid单元格闪烁效果的实现
  • ¥15 图像分割、图像边缘提取
  • ¥15 sqlserver执行存储过程报错
  • ¥100 nuxt、uniapp、ruoyi-vue 相关发布问题
  • ¥15 浮窗和全屏应用同时存在,全屏应用输入法无法弹出
  • ¥100 matlab2009 32位一直初始化
  • ¥15 Expected type 'str | PathLike[str]…… bytes' instead
  • ¥15 为什么在iis上部署网站,服务器可以访问,但是本地电脑访问不了
  • ¥15 三极管电路求解,已知电阻电压和三级关放大倍数
  • ¥15 ADS时域 连续相位观察方法