求教: C语言如何对已写入文件中的数据加以修改?
我想思路应该是,写入->读取->修改->再写入。但实现不知怎样做。我试了一下,但不行。麻烦看看问题何在。
//change data written in a file
#include <stdio.h>
#include <stdlib.h>
#define SIZE 41
#define MAX 81
struct person{
char name[SIZE];
unsigned short age;
char address[MAX];
char job[SIZE];
};
int main(void)
{
struct person info;
struct person rec;
struct person turnout;
FILE * fp;
long fl;
if((fp = fopen("info.dat","wb")) == NULL)
{
fprintf(stderr, "Error opening %s", "info.dat");
exit(EXIT_FAILURE);
}
printf("Name: ");
fgets(info.name, SIZE, stdin);
printf("\nAge: ");
scanf("%u", &info.age);
getchar();
printf("\nAddress: ");
fgets(info.address, SIZE, stdin);
printf("\nJob: ");
fgets(info.job, SIZE, stdin);
fwrite(&info, sizeof (struct person), 1, fp);
puts("\nOriginally:");
printf("Name: %s", info.name);
printf("\nAge: %u",info.age);
printf("\nAddress: %s", info.address);
printf("\nJob: %s", info.job);
fl = ftell(fp);
fseek(fp, fl-(long)sizeof(struct person), SEEK_CUR);
fread(&rec, sizeof (struct person), 1, fp);
puts("Rec:");
puts("\nNow:");
printf("Name: %s", rec.name);
printf("\nAge: %u",rec.age);
printf("\nAddress: %s", rec.address);
printf("\nJob: %s", rec.job);
printf("\nName: ");
fgets(rec.name, SIZE, stdin);
printf("\nAge: ");
scanf("%u", &rec.age);
getchar();
printf("\nAddress: ");
fgets(rec.address, SIZE, stdin);
printf("\nJob: ");
fgets(rec.job, SIZE, stdin);
fl = ftell(fp);
fseek(fp, fl-(long)sizeof(struct person), SEEK_CUR);
fwrite(&rec, sizeof (struct person), 1, fp);
fseek(fp, -(long)sizeof(struct person), SEEK_CUR);
fread(&turnout, sizeof (struct person), 1, fp);
puts("\nNow:");
printf("Name: %s", turnout.name);
printf("\nAge: %u",turnout.age);
printf("\nAddress: %s", turnout.address);
printf("\nJob: %s", turnout.job);
fclose(fp);
return 0;
} C 文件 数据
[解决办法]
if((fp = fopen("info.dat","wb")) == NULL)
//改成,
if((fp = fopen("info.dat","wb+")) == NULL)
// 建议检查每个函数的返回值!