我在使用fwrite
和fread -> fread (void*, size_t, size_t, FILE*);
的程序时遇到一些问题,当设置的第二个size_t
为任何不同于0的数字时,它不起作用。
这是代码;它没有这种方式,如果有人能帮助我会很感激。
P.S。:如果我用read
和write
函数代替那个sc,它会起作用,但不是预期的。
#include<stdio.h>
#include<stdlib.h>
#define TAM 10
#define sc 5
typedef struct str_score{
float scr;
char nome[TAM];
}score;
int main(){
FILE *arq;
int x;
score a[sc], i={0.00,"-empty-"};
if ((fopen("highscore.bin", "wb+"))==NULL){
perror("Erro na abertura do arquivo\n");
return 1;
}
fwrite(&i,sizeof(score), sc, arq);
fread(a ,sizeof(score), sc, arq);
for (x=0;x<sc;x++){
printf("%s %.2f", a[x].nome,a[x].scr);
}
return 0;
}
答案 0 :(得分:2)
由于i
不是数组,因此以下行不正确
fwrite(&i,sizeof(score), sc, arq);
这应该是
fwrite(&i,sizeof(score), 1, arq);
只有当您拥有大小为sc
或更大的初始化数组时,才可以编写sc
个元素。
您不接受fopen
的返回值。将您的fopen
行更改为
if ((arq = fopen("highscore.bin", "wb+"))==NULL){
在fwrite
和fread
之间添加
fseek(arq, 0, SEEK_SET);
这会将文件指针重置为开始编写文件的开头。