2016-11-02 1 views
0

Ich habe den folgenden Code:Wie kann ich zwei verschiedene Datentypen aus Binärdatei in C lesen?

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

... 

Und dann der wichtige Teil, der (Schreiben und Lesen) hat versagt:

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

Kann mir jemand erklären, warum das nicht funktioniert? AKA, warum es den ganzen Benutzer liest, aber es liest nicht die Identifikation. Ich habe versucht, einen int zu haben, der die Anzahl der Benutzer zählt und nur diese druckt, aber es hat nicht so gut funktioniert. Vielen Dank für die Hilfe und ich werde mehr Code bei Bedarf posten.

+0

Was funktioniert nicht? Was wird in die Datei geschrieben? –

+0

Ist das der eigentliche Code, den Sie versuchen? Sie haben eine Datei 'f' zum Lesen geöffnet. Womit du dann schreibst. Zwischen Lesen und Wiedereröffnung? Stelle sicher, dass du dich zum Schreiben öffnest, um mit – doctorlove

+0

zu beginnen. Nun, ich schaffe es, alle 50 Benutzer zu lesen, aber das Lesen der int ID gibt 0 zurück (nicht gelesen). –

Antwort

2

Ihre zweite Schleife

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

wird die ID lesen - bis zum Ende der Datei zu bewegen, so dass die folgende Lese fehl.

Wenn Sie in der Datei speichern, wie viele Benutzer Datensätze für diese Zahl zurück und Schleife, können Sie es zum Funktionieren bringen.

+0

so, im Auftrag: 1 - Speichern Array-Länge 2 - Speichern Sie alle Benutzer 3 - Speichern ID Recht? –

+0

In der Tat. Es sei denn, die 50 wird immer 50 sein. – doctorlove

+0

hat perfekt funktioniert. Danke für die Hilfe, Prost! –

Verwandte Themen