Aus einer Datei lesen??
-
humanist schrieb:
Exhumed schrieb:
warum "malloc(sizeof(struct address)*2)", reicht nicht "malloc(sizeof(struct adress));
und dann kannste doch counter streichen und nur i verwenden, oder?
So muss er nur halb so viele reallocs verwenden, das soll er besser so lassen. Verbesserungen wären 2 mit einer höheren Zahl zu ersetzen, aber theoretisch wäre es optimal, mit zwei zu multiplizieren.
Exhumed schrieb:
Dann kannste auch, statt: n = n+2 schreiben: n += 2.
Äh, wenn er das rausnimmt (dein erster Vorschlag), kann er das nicht mehr so schreiben. Aber im Prinzip hast du Recht.
Nichts für ungut, Du fällst schon länger als Anfänger auf.
Wenn Du das so meinst, wird das schon stimmen...LOL
-
Also, für so ein kleines Programm ist das scheißegal, ob das optimal ist...Tatsache ist, daß die Lesbarkeit darunter leidet. Und Du bist auch ein Anfänger, der hier x 'en großen raushängen läßt. LOL
-
Das Problem ist, dass dein fscanf-Formatstring nicht zu deinem Dateiinhalt passt, da hilft auch keine EOF-Auswertung, es gibt Situationen, in denen fscanf den Dateizeiger NICHT verändert und er auch nicht am Dateiende steht.
Lies die Datei zeilenweise als String und werte den String mit sscanf aus.
-
Woran erkennt man Anfänger: Sie meinen sie müßten ihre Hausaufgaben-Programme so optimiern, daß sie "assembler-like" sind...LOOOOOOOOOL
-
Kannst du nicht wo anders doof sein? Java Forum oder so?
-
Ok danke schon mal für die vielen Antworten. Ich habe das probiert mit sscanf nur leider ohne Erfolg. Ich bin noch ein realtiver Anfänger auf dem Gebiet mit Dateien. Ich versteh nicht ganz wie man einen String zeilenweise ausließt, ich will ja aus der Datei lesen?
Der Syntax für sscanf sieht ja so aus:int sscanf( const char * restrict quell_string, const char * restrict format, ...);
Und wo würde ich dann dann die Datei reinschreiben (dat)?
Vielleicht hab ich auch alles richtig gemacht und ich hab schon mal falsch eingelesen--> nämlich die Export Funktion?
void export_friends() { int i=0; dat = fopen("friends.txt","w"); for(i=0; i < counter; i++) { fprintf(dat,"%d, %s\n", friends[i].age, friends[i].name); } fclose(dat); }
-
char zeile[100]; int i=1; struct address *friends = malloc(sizeof*friends); while( fgets(zeile,100,dat) ) if( 2==sscanf(zeile,"%d, %s",&friends[i-1].age,friends[i-1].name) ) friends = realloc(friends,++i*sizeof*friends);
-
Danke, hab das Programm jetzt zu laufen gebracht und funktioniert 1A.
Leider muss ich das Programm unterteilen in Header files wenn man das so richtig ausdrückt.
-Ich habe eine friends.h erstellt in welche alle Libarys und alle Prototypen der Funktion drinnen sind.
-Dann habe ich eine friends.c erstellt in welche ich #include "friends.h" einbinde und alle Funktionen ausprogrammiere.
-In der main binde ich noch "friends.h" ein und rufe alle Funktionen aufIch weiss nicht genau was das alles genau bringen soll..vielleicht für enorme Programme ist es gut zu wissen wie man so etwas macht.
Nur mein Problem ist, wenn ich das Programm ausführen möchte, dass er mir Fehlermeldungen ausgibt -> undefined reference to "alle verwendeten Funktionen"Hab ich etwas falsch gemacht?
-
Du musst in deinem Projekt noch bekannt geben, dass du auch friends.c mit übersetzt (und gelinkt) haben möchtest.
Wie das geht, hängt von deiner IDE/Compiler ab.
-
So, dankeschön jetzt funkt das Programm wieder
MEINE LETZTE FRAGE ZU DIESEM PROGRAMM:
ich habe das Programm jetzt auf fwrite und fread umgeändert, speichern, auslesen funktioniert alles wunderbar und mein PROBLEM:
Wenn ich einen Blick in die Datei werfe schaut das alles SEHR nach saustall aus. Wie kann man das schön formatieren, dass alles schön untereinander gezeigt wird in der Datei oder geht das bei der Binären Bearbeitung nicht ?
So wird bei mir eingelesen:
(friends ensteht aus: struct address friends[MAX_SIZE]if( (dat = fopen("friendss.txt","w")) != NULL) { fwrite(&friends, sizeof(struct address), counter, dat); }
lg