[C] wie funktioniert denn putchar() genau?

wurzelsepp

Ensign
Registriert
Jan. 2005
Beiträge
217
n schönen guten abend..!
das was das programm machen soll, das macht es - und trotzdem schreib ich hier was rein ;) schon komisch, hehe... das problem ist nur: ich versteh nicht WARUM es das macht. ich hätte was anderes erwartet:
Code:
#include <stdio.h>

int main (void)
{
    int n;
    while((n = getchar()) != EOF)
    {
       putchar(n);
    }
    return 0;
}
also n wird doch da gewissermaßen jedesmal neu initialisiert, oder? also es ist so, dass ich beim programmstart sehe, was eingegeben wird - ist das systemintern so geregelt oder warum ist es so, DASS ich was sehe und nicht vielmehr so, dass ich nichts sehe? das liegt wohl an der funktion getchar() selbst, richtig?

und warum wird dann bei drücken der return-taste (windows) der eingegebene text angezeigt? die bedingung EOF ist ja dann erfüllt - dh die while-schleife wird nichtmehr durchlaufen... es dürfte gar nichts mehr passieren..! meiner einschätzung nach muss es also so sein, dass putchar() sowas wie ein array von einzelnen chars anlegt, die dann bei nem bestimmten zeitpunkt (dann wenn EOF true ist - aber warum?!) ausgegeben werden... oder irgendwie so...

jedenfalls versteh ich die logik noch nicht ganz - was es mir erschwert selbstständig was gutes zu basteln ;) deswegen die frage: wie funktionieren diese beiden funktionen?? wo kann ich das nachlesen (in meinem buch wird das nicht explizit erklärt) oder wer kanns mir näher bringen?!

ich wäre sehr zu dank verpflichtet..!

gruß,

stefan
 
Moin,
also es ist so das die Funktion getchar jeweils wartet bis eine Taste gedrückt wurde, und diese wird dann zurückgeliefert. In deinem Beispiel wird sie dann unter der Variable n gespeichert und über putchar wieder ausgegeben. Ein Tastendruck von Enter bricht aber nicht die schleife ab, da Enter nicht EOF liefert sondern den Code '\n' (New Line).
Um ein EOF einzugeben müsstest du Strg+Z gefolgt von Enter eingeben. Wenn du die Zeile mit der while-Schleife ändern würdest in: while((n = getchar()) != '\n') dann wird nach druck auf Enter das Programm auch beendet. Warum jetzt der gesamte eingegbene Text bei der Enter-Taste wiederholt wird, weiss ich auch nicht mehr genau. Vermutlich wird wie du schon sagtest intern von getchar ein Buffer angelegt und die Daten gespeichert.
 
_getch() müsste dann eher das gewünschte Verhalten liefern.

MfG

Arnd
 
Zurück
Oben