起名方面没有灵感 2021-07-09 10:27 采纳率: 0%
浏览 31

C语言从txt里面删除某一段文字(代码有问题删除不了某一段文字)

#include<stdio.h>
#include<string.h>

void delete_tea();

int main(void){
	delete_tea();
	return 0;
}

void delete_tea(){                                                 // 删除教师信息(直接在文件内部操作) 
    FILE *fp,*ft;
    char set[3]; 
	char key[3];
    int index=0;
    printf("请输入要删除的教师用户名:");
    scanf("%s",set);
   
    fp=fopen("t_key.txt","rt+");
    ft=fopen("temp.txt","wt");
    if(fp==NULL || ft==NULL){
        printf("错误!\n");
        return;
    }
    while(fread(key,sizeof(key),1,fp)){
        if(strcmp(key,set)!=0){
           fwrite(key,sizeof(key),1,ft);
           index++;
        }
        else{
            rewind(fp);
            fseek(fp,sizeof(key)*(index+2),0);
        }
    }
        fclose(fp);
        fclose(ft);
        remove("t_key.txt");
        rename("temp.txt","t_key.txt");
        printf("教师信息删除成功!\n");

}
  • 写回答

1条回答 默认 最新

  • qfl_sdu 2021-07-09 10:56
    关注

    fread(key,sizeof(key),1,fp)每次读取3个字节,不包括'\0',但是strcmp(key,set)比较的时候,用'\0'作为字符串的结束符,所以每次你读取的数据进行比较的时候可能会出问题。所以key和set都需要用\0结束,申请空间的时候申请4个字节,用来存放\0,但是从文件中读取的时候,只读取3个字节。从键盘给set赋值的时候,也只能读取3个字节,第四个字节(set[3])必须设为0

    评论

报告相同问题?

问题事件

  • 创建了问题 7月9日

悬赏问题

  • ¥15 ogg dd trandata 报错
  • ¥15 高缺失率数据如何选择填充方式
  • ¥50 potsgresql15备份问题
  • ¥15 Mac系统vs code使用phpstudy如何配置debug来调试php
  • ¥15 目前主流的音乐软件,像网易云音乐,QQ音乐他们的前端和后台部分是用的什么技术实现的?求解!
  • ¥60 pb数据库修改与连接
  • ¥15 spss统计中二分类变量和有序变量的相关性分析可以用kendall相关分析吗?
  • ¥15 拟通过pc下指令到安卓系统,如果追求响应速度,尽可能无延迟,是不是用安卓模拟器会优于实体的安卓手机?如果是,可以快多少毫秒?
  • ¥20 神经网络Sequential name=sequential, built=False
  • ¥16 Qphython 用xlrd读取excel报错