2016-10-25 5 views
0

Der folgende Code sollte zuerst "Geben Sie einen Brief ein:". Sobald Enter gedrückt wird, sollte die Ausgabe zeigen "Sie eingegeben: <achar>."C getchar() funktioniert ordnungsgemäß im Terminal, aber nicht CLion

Ich benutze Jet Brains IDE, CLion. Gestern funktionierte der Code wie oben beschrieben. Heute jedoch, wenn ich den Code ausführe, bekomme ich eine Leerzeile. Wenn ein Schlüssel durch Eingabe gefolgt gedrückt wird, bekomme ich die Ausgabe:

Letter: You typed: <achar> 

Wenn ich jedoch eine \ setzen n nach „Geben Sie einen Brief:“, die prompt zeigt aber gibt die gedrückte Taste auf der nächsten Zeile wegen der \ n.

Ich habe den genauen Code in eine .c-Datei kopiert, kompiliert und im Terminal ausgeführt, und es wird wie erwartet ausgeführt.

#include <stdio.h> 

int main() { 
    int c; 
    printf("Type a letter: "); // works if \n used, but jumps to next line when key pressed 
    c = getchar(); 
    printf("You typed: %c\n", c); 
    return (0); 
} 
+0

Das hat funktioniert. Aber warum? Ich nehme an, dass flush den belegten Speicher löscht. Aber warum gibt es im Terminal kein Problem? Setzen Sie dies als eine Antwort mit einer Erklärung, wenn Sie können, und ich werde es als beantwortet markieren. Vielen Dank! – dbconfession

Antwort

3

Das Terminal gepuffert. printf("Type a letter: "); Wenn der Printf eine neue Zeile enthält ('\n'), wird gedruckt. Ohne eine neue Zeile können Sie die Druckausgabe erzwingen, indem Sie fflush(stdout); aufrufen, andernfalls wartet printf, bis der Puffer voll ist, bevor gedruckt wird.
Beachten Sie, dass Eingangsströme nicht gespült werden sollten fflush(stdin);

0

Es geschieht, weil, nachdem Sie einen Buchstaben eingeben und Sie Enter drücken Sie Ihren Brief tatsächlich haben (zB: A) und die neue Linie (\n) Charakter. Dies bedeutet, dass Sie den Puffer reinigen müssen.

Versuchen folgende:

#include <stdio.h> 

int main(void) { 
    int c; 
    printf("Type a letter: "); // works if \n used, but jumps to next line when key pressed 
    while((c = getchar()) != 0 && c != '\n' && c != EOF); 

    printf("You typed: %c\n", c); 
    return 0; 
} 
Verwandte Themen