2013-06-30 63 views
0

我在使用fwritefread -> fread (void*, size_t, size_t, FILE*);的程序時出現了一些問題,當設置的第二個size_t與任何不同於零的數字不起作用時。 這是代碼;它不以這種方式工作,如果有人可以幫助,我將不勝感激。fread和fwrite的問題

P.S .:如果我用readwrite函數替代該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; 

} 
+2

這只是因爲您的編譯器通過發送錯誤的機器碼來懲罰您的代碼的格式。 – 2013-06-30 08:16:20

+2

(嚴格來說,格式化/縮進你的代碼並檢查'fread()'和'fwrite()'的返回值。) – 2013-06-30 08:16:48

回答

2
  1. 由於i不是數組,下面的行是不正確的

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

    這應該是

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

    可以編寫sc數量的元件,只有當你有一個大小爲sc或更大的初始化數組。

  2. 您不接受fopen的返回值。您fopen行更改爲

    if ((arq = fopen("highscore.bin", "wb+"))==NULL){ 
    
  3. fwritefread之間,把

    fseek(arq, 0, SEEK_SET); 
    

這將重置文件指針到您開始寫文件的開頭。

+0

感謝評論,它現在可用。關於「fwrite(&i,sizeof(分數),sc,arq)」,我想這會寫我sc時間。我替換爲 - (x = 0; x user2536075

+0

'我已經爲我寫了sc時代。「 - 它實際上是從'&i'開始讀取sc * sizeof(i)'字節 - 這就是爲什麼您的'fread'做了類似的事情精細。 – user93353