知道以下代码无效的原因吗?
我的结构:
struct Records
{
int Number;
char Name[20];
float Salary;
};
主要代码:
FILE * binaryfile;
binaryfile = fopen("binaryfile.dat","r+b");
struct Records MyRecords;
printf("Name: \n");
gets(MyRecords.Name);
printf("Yearly Salary: \n");
scanf("%f%*c",&MyRecords.Salary);
fseek(binaryfile,2L*sizeof(struct Records),SEEK_SET);
fread(&MyRecords.Number, sizeof(MyRecords.Number), 1, binaryfile);
fwrite(&MyRecords.Name, sizeof(MyRecords.Name), 1, binaryfile);
fwrite(&MyRecords.Salary, sizeof(MyRecords.Salary), 1, binaryfile);
我错过了二元课,所以我对此的理解非常不稳定,但这就是我想要做的:
使用fseek,我将进入第3条记录的开头,即“3,随机名称,50.00”。
然后我将3读入MyRecords.Number(我已经测试过这一点)。然后当指针在名字上时,我试图用新的覆盖它和薪水。
但不知怎的,它不起作用。我已经尝试将文件打开更改为ab +,wb +,rb +,rb等内容,但没有成功。
答案 0 :(得分:3)
恕我直言,你总是应该在你的代码中使用一个完整的结构:读取它(即fread(& MyRecords,sizeof(MyRecord)...)),在同一个地方再次更改元素,fseek并整个写入结构体。您的工作方式可能会遇到数据对齐方面的任何问题。
答案 1 :(得分:0)
像克里斯所说的那样,你需要更加明确一些不起作用的东西。随便看一下你的代码似乎是正确的。您是否验证过binaryfile.dat确实存在于您运行该程序的文件夹中,并且它的格式是应该的?
答案 2 :(得分:0)
尝试删除&
:
fwrite(&MyRecords.Name, sizeof(MyRecords.Name), 1, binaryfile);
^
答案 3 :(得分:0)
您需要使用“r + b”,因为使用“w + b”将删除文件(如您所见)并且“ab”或“rb”将不允许写入文件 - 您需要“ +“也在那里。