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

时间:2015-10-15 13:19:30

标签: c binaryfiles fwrite

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

1 个答案:

答案 0 :(得分:2)

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

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

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