C语言中用文件覆盖法删除文件中数据源代码
发布网友
发布时间:2022-05-27 18:52
我来回答
共3个回答
热心网友
时间:2023-11-18 11:50
这样应该可以:
#include <stdlib.h>
#include <stdio.h>
#include <memory.h>
#include <string.h>
struct works_list
{
char name[10];
char addr[20];
char age[10];
char phone[13];
char sex[10];
char gongzi[10];
char xueli[10];
char wu[10];
char xuhao[10];
char beizhu[50];
};
void menu()
{
}
/*接收多余的按键*/
void eatenter()
{
while(getchar() != '\n');
}
/*添加函数*/
void new_work()
{
FILE *da;
char choice;
struct works_list f;
if((da = fopen("data.txt", "a+")) == NULL)
{
printf("\n不能建立数据文件!!!");
exit(0);
}
do
{
printf("请输入序号:\n");
scanf("%s",f.xuhao );
eatenter();
printf("请输入姓名:\n");
scanf("%s",f.name );
eatenter();
printf("请输入住址:\n");
scanf("%s",f.addr);
eatenter();
printf("请输入年龄:\n");
scanf("%s",f.age);
eatenter();;
printf("请输入性别[m为女f为男]:\n");
scanf("%s",f.sex);
eatenter();
printf("请输入工资:\n");
scanf("%s",f.gongzi);
eatenter();
printf("请输入学历:\n");
scanf("%s",f.xueli);
eatenter();
printf("请输入职务:\n");
scanf("%s",f.wu);
eatenter();
printf("请输入电话号码:\n");
scanf("%s",f.phone);
eatenter();
printf("\n\n\n输入完毕,是否保存?\n1.是,我要保存!2.不,我要重新输入!\n3.返回主菜单\n");
scanf("%s",&choice);
eatenter();
if('1'==choice)
{
fprintf(da, "%s %s %s %s %s %s %s %s %s\n",f.xuhao,f.name,f.addr,f.age,f.sex,f.gongzi,f.xueli,f.wu,f.phone);
printf("保存完毕!\n");
system("cls");
menu();
}
else if('2'==choice)
{
system("cls");
}
else if('3'==choice)
{
system("cls");
menu();
}
else
{
system("cls");
printf("\n\n\n\n****************输入错误,系统返回至主菜单************\n\n\n\n");
menu();
}
if ('2' != choice)
fclose(da);
}while(choice==2);
}
void remove()
{
FILE *infile, *outfile;
struct works_list f;
char name[10];
infile = fopen("data.txt", "r");
outfile = fopen("temp123.txt", "w");
if (infile == NULL || outfile == NULL)
{
printf("\n打开文件出错!!!");
exit(0);
}
printf("请输入一个姓名:");
scanf("%s", name);
eatenter();
while (1)
{
memset(&f, 0, sizeof(struct works_list));
fscanf(infile, "%s %s %s %s %s %s %s %s %s",f.xuhao,f.name,f.addr,f.age,f.sex,f.gongzi,f.xueli,f.wu,f.phone);
if (f.name[0] == 0)
break;
if (strcmp(name, f.name))
{
fprintf(outfile, "%s %s %s %s %s %s %s %s %s\n",f.xuhao,f.name,f.addr,f.age,f.sex,f.gongzi,f.xueli,f.wu,f.phone);
}
}
fclose(infile);
fclose(outfile);
unlink("data.txt");
rename("temp123.txt", "data.txt");
}
热心网友
时间:2023-11-18 11:51
你原来的文件是二进制文件的话,才可以用 "b"
if((da = fopen("data.txt", "ab+")) == NULL)
二进制文件用 fseek 找到读写位置,用fwrite来写,不用fprintf。
用二进制文件你可以一个结构一个结构地读写。
如果你原来的文件是文本文件的话,不可以用 "b"
热心网友
时间:2023-11-18 11:51
打开文件时模式不用加a,就可以覆盖原数据了.