Zeichen zählen mit getchar()
-
Hallo!
Ich habe bei folgender Aufgabe Probleme:
Man soll mit getchar() ein Programm schreiben welches den ASCII-Code der eingegebenen Zeichen ausgibt und sobald ^z eingegeben wird soll die Anzahl der Zeichen ausgegeben werden. In der Lösung steht folgender Quelltext:int main (void) { int c = 0; int anzahl = 0; printf ("\n\n\n"); c = getchar(); if (c != EOF) { anzahl = anzahl + 1; } printf ("Ascii-Code: %3d\n",c); while (c != EOF) { c = getchar(); printf ("Ascii-Code: %3d\n", c); if (c != EOF) anzahl = anzahl + 1; } printf ("Anzahl: %3d\n", anzahl); system("PAUSE"); return 0; }
Wenn ich nun aber ein Zeichen eingebe und auf Enter drücke wird nicht nur der ASCII-Code des eingegebenen Zeichens ausgegeben sondern auch "ASCII-Code: 10".
Wenn ich durch Eingabe von ^z die Ausgabe der Buchstabenanzahl herbeiführe wird dieses Zeichen das ich nicht eingegeben habe mit dem ASCII-Code 10 mitgezählt, wodurch eine zu hohe Zahl ausgegeben wird.
Woher kommt das, und wie kann ich es ändern?
-
Enter, Zeilenumbruch == 10
while (c != EOF) { c = getchar(); if (c != EOF && c != 10) { printf ("Ascii-Code: %3d\n", c); anzahl = anzahl + 1; } }
-
Die Vorgabe "^z" lässt auf Plattform Windows schließen, hinsichtlich des Anspruches von ANSI C nicht sehr konsequent diese Aufgabenstellung deines Lehrers/Seminarleiters, aber mit system("PAUSE") hast du dies ja auch implizit umgesetzt.
Wie schon erwähnt, musst du die Abbruchbedingung für getchar() '\n'=<Enter> von der Bearbeitung ausschließen.main () { int c; int anzahl = 0; printf ("\n\n\n"); while( (c=getchar()) != EOF ) if( c!='\n' ) { printf ("Ascii-Code: %3d\n", c); ++anzahl; } printf ("Anzahl: %3d\n", anzahl); system("PAUSE"); return 0; }