struct - Auto-Struktur programmieren
-
Hallo,
ich möchte ein Programm programmieren, welches Autos aus einer .txt ausliest und man auch Werte hinzufügen kann. Hier mein bisheriges Programm:#include <stdio.h> #include <stdlib.h> FILE *file; int n = 99; const char * const MeineDatei = "meineautos.txt"; int lc, lv = 0; typedef struct vehicle CAR; struct vehicle { char Hersteller[10]; char Modell[10]; // hier Attribute einfuegen unsigned int vMax; }; void ShowMenu() { printf("Bitte waehle!\n\n"); printf("1. Anzeigen der gespeicherten Autos.\n"); printf("2. Neues Auto anlegen.\n"); printf("3. <not implemented> \n"); printf("4. Beenden.\n"); } void ReadFile() { char str0 [n]; char str1 [n]; int i=0; // Startvaribale der Struktur int wert; CAR MeineAutoListe [n]; if ((file = fopen (MeineDatei, "r")) == NULL) { fprintf (stderr, "Fehler beim Oeffnen der Datei %s.\n", MeineDatei); return 1; } while (!feof(file)) { // Werte in den zugehörigen Variablen speichern fscanf(file, "%s %s %d", MeineAutoListe[i].Hersteller, MeineAutoListe[i].Modell, &MeineAutoListe[i].vMax); i++; } n = i-1; for (i=0; i<=n; i++) { printf("%s - %s, %dkm/h\n", MeineAutoListe[i].Hersteller, MeineAutoListe[i].Modell, MeineAutoListe[i].vMax); } fclose (file); } int main(int argc, char** argv) { CAR MeineAutoListe [n]; //n Autos erzeugen int zahl; while (1) { ShowMenu(); scanf ("%d", &zahl); switch(zahl) { case 1: ReadFile(); break; case 2: printf ("hallo"); break; case 3: printf ("hallo"); break; case 4: return (EXIT_SUCCESS); } } return (EXIT_SUCCESS); }
Das Problem ist, ich weiß nicht, wie ich die Struktur übergeben kann. Ich definier sie (in der ReadFile-Funktion, Zeile 33) neu, was natürlich nicht Sinn der Sache ist. Bin Um Ratschläge sehr dankbar.
-
Mach die Liste doch global. (so wie lc und lv)
Ansonsten über Zeiger.
-
global habe ich auch schon gedacht, aber das ist immer so "unschön". Und Zeiger wiederum ist etwas kompliziert, lässt es sich gar nicht übergeben an eine Funktion?
//global definiert folgt folgende Fehlermeldung:
error: variably modified 'MeineAutoListe' at file scope
-
supersass1 schrieb:
global habe ich auch schon gedacht, aber das ist immer so "unschön". Und Zeiger wiederum ist etwas kompliziert, lässt es sich gar nicht übergeben an eine Funktion?
Du kannst ein struct übergeben, aber kein Array. Daher Zeiger. Mit Strings kommst du doch auch klar.
void ReadFile(CAR *MeineAutoListe, int *Anzahl) { .... ... printf("%s - %s\n", MeineAutoListe[i]->Hersteller, MeineAutoListe[i]->Modell); ....
in main:
ReadFile(MeineAutoListe, &Anzahl);
supersass1 schrieb:
//global definiert folgt folgende Fehlermeldung:
error: variably modified 'MeineAutoListe' at file scope
WO hast du denn 'MeineAutoListe' definiert? Vor oder nach dem typedef?
-
DirkB schrieb:
supersass1 schrieb:
global habe ich auch schon gedacht, aber das ist immer so "unschön". Und Zeiger wiederum ist etwas kompliziert, lässt es sich gar nicht übergeben an eine Funktion?
Du kannst ein struct übergeben, aber kein Array. Daher Zeiger. Mit Strings kommst du doch auch klar.
void ReadFile(CAR *MeineAutoListe, int *Anzahl) { .... ... printf("%s - %s\n", MeineAutoListe[i]->Hersteller, MeineAutoListe[i]->Modell); ....
das klappt soweit, aber nur wenn ich
MeineAutoListe[i].Hersteller
statt:
MeineAutoListe[i]->Hersteller
schreibe.
supersass1 schrieb:
//global definiert folgt folgende Fehlermeldung:
error: variably modified 'MeineAutoListe' at file scope
WO hast du denn 'MeineAutoListe' definiert? Vor oder nach dem typedef?
[/quote]
Danach, aber ich glaube ich benutze nun die Zeigervariante (ist wohl das gängiste).
-
das klappt soweit, aber nur wenn ich
Zitat:MeineAutoListe[i].Hersteller
statt:
Zitat:MeineAutoListe[i]->Hersteller
schreibe.
Ja klar! Danke.
-
Es klappt jetzt, vielen Dank!