Hilfe Programm Dateiverarbeitung
-
Danke für die Tips!
void datei_oeffnen_lesen(char *dateiname) { FILE *ptr; int i; char temp[5]; char kurve[] = "CONS"; char kurve_auf_flaeche[] = "CURVE"; char traegerflaeche[] = "SURF"; int zaehler_kurve = 0; int zaehler_kurve_auf_flaeche = 0; int zaehler_traegerflaeche = 0; ptr = fopen (dateiname, "r"); if (ptr == NULL) { printf("\nIch konnte die Datei nicht oeffnen!"); } else { printf("\nDie Datei wurde geoeffnet!\n"); while(!feof(ptr)) //solange Datei nicht dem Ende angekommen ist { fscanf(ptr,"%99s", &temp); //printf("gelesen:%s\n", temp); if(strcmp(temp, kurve)== 0) { zaehler_kurve++; } } printf("Datei enthaelt Kurven %i mal\n", zaehler_kurve); } fclose (ptr); printf("\n\n"); }
Mit der Schleife While(!feof(ptr)) läuft er jetzt nur bis zum Ende und speichert die Anzahl der gesuchten Strings in die Variable zaehler_kurve.
Allerdings erscheint in der Konsole dies:
Es soll die Datei C:\EDV\lcc\lcc\Projekte\EDV2_Projekt\Testdateien\Test_CONS.txt geoeffnet werden Die Datei wurde geoeffnet! gelesen:CONS gelesen:CONS gelesen:CONS gelesen:CONS gelesen:CONS gelesen:CONS gelesen:CONS gelesen:CONS gelesen:CONS gelesen:HANS gelesen:WURST gelesen:CONS Datei enthaelt Kurven 10 mal abnormal program termination "c:\edv\lcc\lcc\projekte\edv2_projekt\lcc\projekt1.exe" Return code 3 Execution time 7.017 seconds Press any key to continue...
Kann das jemand deuten?
-
Also das "abnormal program termination".
-
Nimm das mal solange:
while (fgets(temp, sizeof temp, ptr) != NULL){ printf("gelesen:%s", temp); }
-
maddin900 schrieb:
Nimm das mal solange:
while (fgets(temp, sizeof temp, ptr) != NULL){ printf("gelesen:%s", temp); }
Danke. Das Problem ist aber, dass er mir jetzt die Leerzeichen mitausgibt.
Bräuchte aber jeweils 1 Wort je temp Variable, damit ich sie vergleichen kann.
-
DirkB schrieb:
Es gibt die Funktion feof im der Standard-Library.
Du kannst den Status aber erst nach der Leseoperation abfragen, daher ist diese while-Schleife auch nicht richtig.maddin900 schrieb:
Nimm das mal solange:
while (fgets(temp, sizeof temp, ptr) != NULL){ printf("gelesen:%s", temp); }
fgets
ist hier nicht geeignet, da er Wörter zählen möchte.
Zudem speichertfgets
das \n mit im String ab, was dasstrcmp
erschwert.
Das sinnvolle an dem Tipp ist, die Leseoperation in derwhile-
Bedingung zu machen und den Rückgabewert auszuwerten.
Das geht auch mitfscanf
. Man muss nur den richtigen Vergleichswert nehmen.NULL
ist es nicht