无效的功能
我正在写一个简单的函数,打开一个包含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);
}
也许我的错误在于再次读取文件的值的过程,所以我将包括显示这些值的函数,如果它有用的话。
我没有得到任何编译器错误或警告,我一直在看其他工作示例,所以我真的不知道我做错了什么。
答案 0 :(得分:1)
这一行
fseek(fPtr, (student * sizeof(int) - 1), 0);
应该是
fseek(fPtr, (student-1) * sizeof(int), 0);
否则写入会移位一个字节。