2016-11-02 14 views
0

私は次のコードを持っている:Cでバイナリファイルから2つの異なるデータ型を読み取るにはどうすればよいですか?

typedef struct{ 
    int user_id; 
    char username[100]; 
    char password[25]; 
} User; 
int id = 10001; 
User array[50]; 

... 

そして(書き込み、読み出し)を失敗しています重要な部分を:これが動作しない理由を

FILE *f = fopen("users.dat", "w"); 
User aux; 
int j = 0; 


for(int i = 0; i < 50; i++){ 
       fwrite(&array[i],sizeof(array[i]),1 , f); 
      } 
      fwrite(&id, sizeof(id), 1, f); 
fclose(f); 
f = fopen("users.dat,"r"); 
while(fread(&aux, sizeof(aux), 1, f)){ 
     array[j++] = aux; 
    } 
    fread(&id, sizeof(id),1 ,f); 

誰かが私に説明できますか?なぜそれはすべてのユーザーを読んでいるが、それはIDを読み取っていません。私は、ユーザーの数を数え、それらを印刷するだけのintを持つことを試みましたが、うまくいきませんでした。 助けていただきありがとうございます。必要に応じてさらにコードを投稿します。ファイルの末尾に移動するので、次の読み取りに失敗します - あなたの第二のループ

while(fread(&aux, sizeof(aux), 1, f)) 

+0

何が問題なのですか?ファイルには何が書き込まれますか? –

+0

これは実際のコードですか?読み込みのために1つのファイル 'f'を開いています。あなたはそれを書きます。読書と再開の間に閉じますか?あなたは – doctorlove

+0

まあそもそも書き込み用にオープンを確認してください、私はすべての50人のユーザーを読み取るために管理するが、int型のIDの読み取りは(読んでいない)0を返します。 IDの一部を読み、ファイルの末尾に到達... –

答えて

2

は、IDを読み込みます。

ファイルに保存すると、その番号を読み込んでループするユーザーレコードの数が増えると、それを動作させることができます。

+0

を編集してみましょう: 1 - 配列の長さ 2保存 - 権利ID 保存 - すべてのユーザー 3救いますか? –

+0

確かに。 50ない限り、常に50 – doctorlove

+0

、それは完全に働いたことになるだろう。助けてくれてありがとう、歓声! –

関連する問題