0

我在使用fwriteand的程序时遇到了一些问题fread -> fread (void*, size_t, size_t, FILE*);,当设置秒size_t为任何不同于零的数字时,它不起作用。这是代码;它不以这种方式工作,如果有人可以提供帮助,我将不胜感激。

readPS:如果我在and函数上替换那个 sc,write它可以工作,但不像预期的那样。

#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;

}
4

1 回答 1

2
  1. 由于i不是数组,因此以下行不正确

    fwrite(&i,sizeof(score), sc, arq);
    

    这应该是

    fwrite(&i,sizeof(score), 1, arq);
    

    sc只有当您有一个大小sc或更多的初始化数组时,您才能写入元素数量。

  2. 您不接受 的返回值fopenfopen将您的线路更改为

    if ((arq = fopen("highscore.bin", "wb+"))==NULL){
    
  3. fwrite和之间fread,放一个

    fseek(arq, 0, SEEK_SET);
    

这会将文件指针重置为您开始写入的文件的开头。

于 2013-06-30T08:23:17.023 回答