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