Pointer auf Array von Structure
-
Moin,
Ich programmiere erst seit kurzem C und weiß auch noch nicht so viel.
Und zwar habe ich eine Structure. Davon mache ich ein Array, damit ich eben mehrere Datensätze habe.
Nun habe ich eine Datei in diesem Format:0 | 2 1 | Name | Nachname | Straße | PLZ | Ort | 1 | Kennzeichen | Zeit 1 | Zeit 2 2 | Name | Nachname | Straße | PLZ | Ort | 1 | Kennzeichen | Zeit 1 | Zeit 2
In der ersten Zeile stehen die Anzahl der Datensätze. Die 0 ist ohne Bedeutung. Diese Datei gilt es einzulesen. Dazu habe ich folgendes programmiert:
Einmal diese Struktur:
struct datensatz { int nummer; char vorname[50]; char name[50]; char strasse[50]; int plz; char ort[50]; int fahrzeugtyp; char kennzeichen[20]; int ausleihtermin; //jeweils als timestamp int ruckgabetermin; };
Dann im Main:
struct datensatz kunde; // struct datensatz (*ptr_k); // ptr_k = &kunde; // lesen(ptr_k);
Und schließlich die Funktion lesen:
void lesen(struct datensatz * ptr) { FILE * pFile_daten; int datenzahl; pFile_daten = fopen("datei.txt", "r"); fscanf(pFile_daten, "%*i | %i",&datenzahl); fscanf(pFile_daten, "%i | %s | %s | %s",&(*ptr).nummer,&(*ptr).vorname,&(*ptr).name,&(*ptr).strasse); fclose(pFile_daten); }
So und man höre und staune, das funktioniert. (Bei fscanf fehlen natürlich noch ein Paar Variablen, das ist aber hier nicht das Problem) Damit lese ich erfolgreich die ersten beiden Zeilen aus der Datei ein. Nun jetzt gibt es noch eine Dritte Zeile und es sollen noch mehr kommen! Ich hatte mir gedacht, ich ändere das ganze wie folgt ab:
Main:struct datensatz kunde[100]; // struct datensatz (*ptr_k); // ptr_k = &kunde[0]; // lesen(ptr_k);
Funktion:
void lesen(struct datensatz * ptr) { FILE * pFile_daten; int datenzahl, i; pFile_daten = fopen("datei.txt", "r"); fscanf(pFile_daten, "%*i | %i",&datenzahl); for (i=0; i<datenzahl; i++) { fscanf(pFile_daten, "%i | %s | %s | %s",&(*ptr)[i].nummer,&(*ptr)[i].vorname,&(*ptr)[i].name,&(*ptr)[i].strasse); } fclose(pFile_daten); }
Leider funktioniert das nicht. In der Zeile mit fscanf in der Funktion lesen bricht der Compiler ab! Ich habe mich jetzt lange damit beschäftigt und vieles Probiert. Komme aber nicht dahinter, wie man es richtig macht!
Wäre dankbar für Hilfe,
viele Grüße,
Wilko.
-
Nur mal so: &(*ptr) ist effektiv dasselbe wie ptr, also kannst du dir 4 Zeichen sparen.
fscanf(pFile_daten, "%*i | %i",&datenzahl); sieht falsch aus. Du sagst ihm hier er soll 2 ints einlesen, gibst ihm aber nur eine Variable wo er den Wert hineinpacken soll. Der * bei %*i hat auch eine Sonderbedeutung.
Wahrscheinlich meinst du fscanf(pFile_daten, "0 | %i",&datenzahl);.Allgemein wenn du solch einen Fehler hast sieh dir an was genau der Compiler sagt was nicht geht und schreibe es hier mit rein falls du es nicht verstehst.