发布网友 发布时间:2022-04-26 00:29
共5个回答
热心网友 时间:2023-10-24 19:26
#include <stdio.h>
#include<string.h>
typedef struct
{
char a[20];
char b[20];
char c[20];
int d;
}node,*link;
static int len;
void insert()
{
FILE* fp;
int num;
fp=fopen("A.txt","w");
printf("输入记录个数:");
scanf("%d",&num);
len=num;
while(num)
{
link nlink=new node[sizeof(node)];
printf("input a string:");
scanf("%s",nlink->a);
printf("input b string:");
scanf("%s",nlink->b);
printf("input c:string:");
scanf("%s",nlink->c);
printf("input d:int:");
scanf("%d",&nlink->d);
getchar();
fwrite(nlink,sizeof(node),1,fp);
num--;
}
fclose(fp);
}
void show()
{
FILE* fp;
fp=fopen("A.txt","r");
link abc=new node[sizeof(node)];
fread(abc,sizeof(node),1,fp);
int num=len;
while(num)
{
printf("%s %s %s %d\n",abc->a,abc->b,abc->c,abc->d);
fread(abc,sizeof(node),1,fp);
num--;
}
fclose(fp);
}
void add()
{
FILE* fp;
int offset=0;
int flag=0;
int sum=0;
fp=fopen("A.txt","a+");
printf("输入添加记录:\n");
link nlink=new node[sizeof(node)];
printf("input a string:");
scanf("%s",nlink->a);
printf("input b string:");
scanf("%s",nlink->b);
printf("input c:string:");
scanf("%s",nlink->c);
printf("input d:int:");
scanf("%d",&nlink->d);
sum=nlink->d;
//getchar();
int num=len;
link abc=new node[sizeof(node)];
fread(abc,sizeof(node),1,fp);
while(num)
{
if (strcmp(nlink->a,abc->a)==0 && strcmp(nlink->b,abc->b)==0)
{
flag=1;
}
fread(abc,sizeof(node),1,fp);
num--;
}
if (flag==0)
{
len++;
fwrite(nlink,sizeof(node),1,fp);
}
else
{
fclose(fp);
fp=fopen("A.txt","w+");
num=len;
fread(abc,sizeof(node),1,fp);
while(num)
{
if (strcmp(nlink->a,abc->a)==0 && strcmp(nlink->b,abc->b)==0)
{
abc->d+=nlink->d;
fwrite(abc,sizeof(node),1,fp);
}
fread(abc,sizeof(node),1,fp);
num--;
}
}
fclose(fp);
}
void main()
{
insert();
show();
add();
show();
}
热心网友 时间:2023-10-24 19:27
#include "stdio.h"运行样例:
文件之前内容和之后内容
注:办法不少,这是之一……
热心网友 时间:2023-10-24 19:27
如果说你知道应该更改哪一条记录的话,可以直接用fseek函数定位文件指针到那个位置,然后fscanf取该记录,将其加上15后再次fseek定位这个位置然后fprintf写到该位置即可。
热心网友 时间:2023-10-24 19:28
比如已有文件A,它由结构体数组写入。假设结构体数组为4项,前三项是char xxx[20],最后一项是int型。===》描述不清。追答建议,做作业,还是自己看书(比如谭浩强的)或者看源代码,比较给力。
热心网友 时间:2023-10-24 19:28
可以用seek。 因为类型已只,可以计算偏移获得。