2016-04-27 9 views
0
int kr=0; 
int ss =0; 
while ((kr=getchar()) != EOF){ 
     if(kr != '\n') 
     { 
     ss++; 
     } 

     printf("%d\n",ss); 
} 

Mit diesem Code eingeben warten, printf wartet, bis ich dann alle wie die aufeinander ss-Werte bei gleichzeitig Druck Eingabetaste drücken in diesemPrintf für

enter image description here

. Kann jemand dieses Verhalten erklären?

+0

printf hat nichts mit Warteverhalten zu tun ... es ist getchar(). aber zuerst versuchen Sie, Ihr Projekt zu säubern und es wieder aufzubauen ... Und versuchen Sie es erneut. –

+0

gibt es eine Möglichkeit, den Eingabepuffer-Stream für getchar() zu deaktivieren? –

Antwort

5

printf wartet nicht, es ist getchar stattdessen. getchar verwendet einen Puffer hinter der Szene. Wenn dieser Puffer leer ist, liest getchar 1 Zeile von Stdin und dann geben Sie den ersten Buchstaben zurück. Wenn es nicht leer ist, wird der nächste Buchstabe sofort aus dem Puffer zurückgegeben.

Das bedeutet, dass die getchar warten wird, wenn Sie es das erste Mal aufrufen. Und so wird Ihre printf nie ausgeführt, bis Sie drücken enter

+0

Was hat das damit zu tun, dass ich jedes Mal drücken muss, wenn ich etwas drucken will? Ich verstehe Ihre Erklärung nicht –

+0

@DogusUral Es bedeutet, dass der 'getchar' im Zustand Ihrer Schleife blockiert, bis Sie die Eingabetaste drücken, die' printf' wird nie ausgeführt, bis Sie die Eingabetaste drücken. – litelite