Character stückweise einlesen
-
Ich hänge mal wieder an einem vergleichsweise einfachen Problem komme aber einfach nicht weiter.
Ich habe eine Funktion geschrieben, die einen String übergeben bekommt und diesen dann untersucht. Als das nicht geklappt hat, habe ich die Funktion auf das Problem reduziert, sprich alles rausgenommen ausser dem was nicht funktioniert.
Hier kommt sie:int scanne_text ( char *eingabe_zeile ) { char zeichen; int zaehler = 0; do { zeichen = eingabe_zeile[zaehler]; putchar ( zeichen ); zaehler++; }while ( ( zeichen != "\0" ) || ( zeichen != "\n" ) ); return zaehler; }
Der Compiler mokiert hier schon:
bss.c: In function 'scanne_text':
bss.c:66: warning: comparison between pointer and integer
bss.c:66: warning: comparison between pointer and integerUnd wenn ich das Programm laufen lasse bekomme ich die Zeichen der Zeile aber danach geht es munter weiter mit wirren binary-Zeichen.
Ach ja der String wurde vorher mit fgets aus einer Datei gelesen:int laenge_zeile = LEN_ZEILE -1; char eingabe_zeile[LEN_ZEILE]; ... while ( ( fgets( eingabe_zeile, laenge_zeile, eingabe_datei) ) != NULL ) { //fputs ( eingabe_zeile, stdout ); scanne_text ( eingabe_zeile ); }
Wo liegt der Fehler?
Vielen Dank vorab...
Gruss Christian
-
columbus schrieb:
while ( ( zeichen != "\0" ) || ( zeichen != "\n" ) );
"\0" und "\n" sind Stringliterale (einfach ausgedrückt: es sind zeiger auf read-only Strings). Du willst aber eher '\0' und '\n'.
-
Vielen Dank für die schnelle Antwort.
Du hattest recht davon gingen die Compilerwarnings weg.
Jedoch gibt mir das Programm immer noch Zeichen-Schrott aus. Es scheint weder ein \n noch ein \0 in dem String zu sein!??!
-
... }while ( ( zeichen != '\0' ) && (zeichen != '\n' ) );
-
so ist's vielleicht verständlicher (ohne umgedrehte vergleiche)
for (;;) { zeichen = eingabe_zeile[zaehler]; if (zeichen == 0 || zeichen == '\n') // abbruch bei 0 oder zeilenende break; putchar ( zeichen ); zaehler++; }