更改二进制文件中的值 (C)

Change a value in a binary file (C)

程序应该更改记录中的特定值,我使用 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++;
}

您的代码无法覆盖下一条记录。代码是正确的。但是,如果您在程序中进一步使用 Rec(您只给出了一个片段),那么您会发现 Rec 具有意想不到的值。那是因为找到要查找的记录后,while循环再执行一次fread才退出循环。那是因为 while 循环必须写成:

while ((Found == 0) && (fread(&Rec, sizeof(Rec), 1, file) == 1))

否则将在 found 被测试并退出循环之前执行另一个 fread