能来个人详细介绍下涉及文件读写的函数(fseek/fprintf/fscanf/fputs/fputc/...)
不过请优先解决这样的问题
比如已有文件A,它由结构体数组写入。假设结构体数组为4项,前三项是char xxx[20],最后一项是int型。
假设文件A有如下数据(示意而已,先忽略定义的20):
001 bbb ccc 123
002 ccc ddd 321
想实现输入一个数字将它加到文件中任何一组数据的整型数字部分。请问使用什么函数?请留下简单代码。
请您尽量不要使用fprintf。因为我这作业中实际的功能比较复杂。
实际功能类似于A文件中有若干组数据。从键盘输入同格式的数据。假如前两项相同:
比如输入001 bbb xxx 15,那么第三项无视,第四项中的15加到拥有同样前两项的数据的整型数字部分、在这里也就是给123加上15.
因为需要一个循环比较,之前首先用fscanf取出A的数据,然后又要比较,如果用printf写回去感觉逻辑上有些复杂,很容易把数据盖掉。当然如果您有办法解决也可以使用fprintf,但请您留下具体代码。非常感谢~
#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();
}
运行样例:
文件之前内容和之后内容
注:办法不少,这是之一……
哎?是说fprintf写入的必须用fscanf读么?无论写入方式是w还是wb?
这个主要是强调送入文件的数据的结构。用的是fscanf写入的啊。
追答建议,做作业,还是自己看书(比如谭浩强的)或者看源代码,比较给力。
本回答被网友采纳您最好能具体些。fseek不太会用。而且文件的打开方式具体用哪个?