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); }fgetsist hier nicht geeignet, da er Wörter zählen möchte.
Zudem speichertfgetsdas \n mit im String ab, was dasstrcmperschwert.
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.NULList es nicht