ASCII-Zeichen in File-Stream überspringen
-
Hallo zusammen,
für mein Programm muss ich eine Textdatei einlesen und die darin enthaltenden ASCII-Zeichen verarbeiten, bestimmte ASCII-Zeichen wie zum Beispiel Leerzeichen, Zeilenbrüche etc. sollen dabei übersprungen werden.
Bisher habe ich das durch folgende Anweisung realisiert (welche als Beispiel jedes Zeichen größer als ASCII 33 ausgibt):while ((c = fgetc(raw_code)) != EOF) { while (c < 33) c = fgetc(raw_code); printf("%c", c); }
Interessanterweise bekomme ich seid gestern Abend keinerlei Ausgabe mehr mit dieser Anweisung. Zuvor hat es jedoch einwandfrei funktioniert. Das Problem trat erst nach ein paar Fehlern im späteren Programmcode auf.
Um das Ganze besser nachzustellen habe ich folgendes Minimalbeispiel entworfen, welches jedoch auch keine Ausgabe erzeugt:#include<stdlib.h> #include<stdio.h> int main(int argc, char *argv[]) { int c; FILE *raw_code; raw_code = fopen(argv[1], "r"); if(raw_code != NULL) { while ((c = fgetc(raw_code)) != EOF) { while (c < 33) c = fgetc(raw_code); fprintf(stderr, "%c", c); } fclose(raw_code); } else { fclose(raw_code); printf("Couldn't open Source Code!\n"); return EXIT_FAILURE; } }
Hätte jemand eine Idee, was passiert sein könnte bzw. was das Problem ist?
Gruß, Nirvash
-
Ein
if (!(isctrl(c) || isspace(c) ) printf("%c", c); else printf(".");
sollte machen was du möchtest. Die innere while-Schleife entfällt.
In deinem Beispiel reagierst du in der zweiten Schleife nicht auf EOF.isctrl und isspace sind in ctype deklariert
-
Super, danke dir. Es würde mich an der Stelle jedoch noch interessieren, warum es zuerst funktioniert hat und wieso plötzlich nicht?
In meiner Datei, die ich einlese, ist ja das EOF auch vorher enthalten gewesen.
-
Nirvash schrieb:
Super, danke dir. Es würde mich an der Stelle jedoch noch interessieren, warum es zuerst funktioniert hat und wieso plötzlich nicht?
In meiner Datei, die ich einlese, ist ja das EOF auch vorher enthalten gewesen.Zu wenig Informationen über die Datei und das Betriebssystem.
Ist es immer die selbe Datei gewesen?
-
Betriebssystem ist Gentoo folgendem GCC: gcc (Gentoo 4.6.3 p1.11, pie-0.5.2) 4.6.3
Der Inhalt der Datei ist folgender:VAR n, f; PROCEDURE fact; BEGIN IF n THEN BEGIN n = 1; f = 3 END END; BEGIN READ n; f = 1; CALL fact; PRINT f END .
Diese ist als Textdatei gespeichert.
-
Nirvash schrieb:
Super, danke dir. Es würde mich an der Stelle jedoch noch interessieren, warum es zuerst funktioniert hat und wieso plötzlich nicht?
In meiner Datei, die ich einlese, ist ja das EOF auch vorher enthalten gewesen.Nein, das EOF ist nicht in deiner Datei enthalten gewesen. EOF ist der Returncode von fgetc() bei Fehler oder Dateiende und hat üblicherweise den int-Wert -1.