使用fwrite修改二进制文件上的一个int时分配的随机值

时间:2017-12-10 10:27:42

标签: c fwrite fread

无效的功能

我正在写一个简单的函数,打开一个包含20个整数的文件。 用户可以选择1到20之间的数字,然后选择分数。然后应将新分数写入文件,并且在访问文件时,新值应该存在。

void EditScore(void)
{
    printf("\nThis is the function to edit a score.\n");
    FILE *fPtr = NULL;
    int student = 0;
    int score = 0;

    if((fPtr = fopen("score.dat", "rb+")) == NULL)
    {
        printf("File could not be opened.\n");
    }
    else
    {
        printf("Enter the number of student: ");
        scanf("%d", &student);
        printf("Enter the new score for the student: ");
        scanf("%d", &score);

        fseek(fPtr, (student * sizeof(int) - 1), 0);
        fwrite(&score, sizeof(int), 1, fPtr);
    }
    fclose(fPtr);
}

例如,选择学生1并给它一个新的分数10,当与另一个功能一起使用时,应该得分为10,以显示文件的编号。

如果我得分为10,则读取文件时的值为:167772160。 我一直试图看看我使用fwrite函数是否有错误,但我没有找到任何东西。

阅读功能(显然工作正常)

    void DisplayScore(void)
{
    printf("\nThis is the function to display the scores.\n");
    FILE *fPtr = NULL;
    int grades[20] = {0};

    if((fPtr = fopen("score.dat", "rb")) == NULL)
    {
        printf("File could not be opened.\n");
    }
    else
    {
        fread(&grades, sizeof(int), 20, fPtr);
        for(int i = 0; i < 20; i++)
        {
            printf("The score of student %d is %d\n", i + 1, grades[i]);
        }
    }

    fclose(fPtr);
}

也许我的错误在于再次读取文件的值的过程,所以我将包括显示这些值的函数,如果它有用的话。

我没有得到任何编译器错误或警告,我一直在看其他工作示例,所以我真的不知道我做错了什么。

1 个答案:

答案 0 :(得分:1)

这一行

fseek(fPtr, (student * sizeof(int) - 1), 0);

应该是

fseek(fPtr, (student-1) * sizeof(int), 0);

否则写入会移位一个字节。