Zeilenweises Auslesen aus Textdatei
-
für eine variable zeilenzahl wirst du malloc usw. bemühen müssen
allerdings solltest du bei deiner jetzigen lösung aufpassen es könnte zu überläufen kommen deshalb
FILE *f = .... char str[100]; fscanf(f, "%99s", str);
oder du schreibst deine eigene string einlese funktion mit malloc für beliebig lange strings
-
Hast du schon structs kennen gelernt?
-
Ja, haben wir!
-
Mach eine struct aus Name und Preis.
Dann ein Array von der struct.
Dann hast du nicht 6 Variablen für 3 Produkte sondern nur noch eine mit einem IndexJetzt kannst du erstmal einlesen.
Wenn das klappt, kannst du dich um variable Zeilenzahl mit malloc kümmern (dann aber auch malloc für den Namen).
-
komme iwie nicht weiter mit dem Einlesen, hab keine Idee wie ich das in einer schleife realisieren soll... derzeit sieht es bei mir so aus:
#include <stdio.h> typedef struct{ double Preis; char Name[30]; }a[100]; void open ( FILE *datei, char dateiname[], a *artikel){ datei = fopen (dateiname, "r"); if (datei == NULL) printf("Fehler beim Einlesen der Datei"); else{ printf("Datei erfolgreich eingelesen!"); while ((fscanf(datei,"%s,%lf\n",&artikel.name,&artikel.preis)!=EOF)); } fclose(datei); } int main(){ a artikel; FILE *datei; char dateiname[50]="artikel.txt"; open(&datei,dateiname,&artikel); return 0; }
-
Sei nicht so faul und benenne den struct-Typ mal vernünftig.
Und Schleifen kennst du ja wohl.
Einfach das Array mit einem Index durchlaufen.
-
#include <stdio.h> typedef struct{ double Preis; char Name[30]; }Artikel[10]; void open ( FILE *datei, char dateiname[], Artikel *a){ int i=0; datei = fopen (dateiname, "r"); if (datei == NULL) printf("Fehler beim Einlesen der Datei"); else{ printf("Datei erfolgreich eingelesen!"); while (datei != EOF){ fscanf(datei,"%s %lf\n",a[i].Name,a[i].Preis); i++; } } fclose(datei); } int main(){ Artikel a; FILE *datei; char dateiname[50]="artikel.txt"; open(datei,dateiname,&a); return 0; }
Es stimmt trotz alledem etwas nicht in der Schleife und der Funktionsübergabe, weiß nur nicht was!
Folgende Meldung:
error: request for memberName' in something not a structure or union| error: request for member
Preis' in something not a structure or union|
-
Das & und * vor a muss weg.
-
Es comp. stürzt dann aber nach ausführen direkt ab...
geht meine while bedingung überhaupt so?while(datei != EOF){}
Weiß er denn dass er auf die nächste Zeile springen muss nach einem durchlauf?
-
Wenn a ein Zeiger auf einen einzelnen Artikel ist, was ist dann a[i]?
fussl134 schrieb:
geht meine while bedingung überhaupt so?
while(datei != EOF){}
Nein, das ist auf vielerlei Weise falsch. Vielleicht solltest du dir lieber erst einmal ein schlaues Buch besorgen und lesen, sonst müssen wir dir am Ende noch jede einzelne Zeile deines Programms korrigieren und verstehen wirst du die Korrekturen vermutlich auch nicht.