程序应该更改记录中的特定值,我使用fseek和fwrite来执行此操作。但是当我运行它时,它会覆盖下一条记录。
这是我的计划的一部分:
j = 0;
while ((fread(&Rec, sizeof(Rec), 1, file) == 1) && (Found == 0))
{
if (strcmp(Rec.Name, SearchName) == 0)
{
if (Rec.BD == SearchBD)
{
Found = 1;
printf("\nEnter the new value : ");
scanf("%f", &Val);
fseek(file, (sizeof(Rec))*j, SEEK_SET);
strcpy(Rec.Name, SearchName);
Rec.BD = SearchBD;
Rec.V = Val;
fwrite(&Rec, sizeof(Rec), 1, file);
}
}
j++;
}
答案 0 :(得分:2)
您的代码无法覆盖下一条记录。代码是正确的。但是,如果您在程序中进一步使用Rec
(您只提供了一个代码段),那么您会发现Rec
具有意外值。这是因为在找到搜索的记录之后,while
循环在退出循环之前再执行一次fread
。这是因为while
循环必须写为:
while ((Found == 0) && (fread(&Rec, sizeof(Rec), 1, file) == 1))
否则将在fread
进行测试并退出循环之前执行另一个found
。