Frage

Ich bin über getchar() Rolle in dem folgenden Code verwirrt. Ich meine, ich weiß, es hilft mir das Ausgabefenster sehen, die nur geschlossen werden, wenn ich die Taste Enter drücken.

So getchar() wartet im Grunde für mich die Eingabetaste drücken, um und liest dann ein einzelnes Zeichen.

Was ist das einzelne Zeichen dieser Funktion lesen ist? Ich habe drücken keine Taste auf der Tastatur für ihn zu lesen.

Nun, wenn es nichts zu lesen, warum gibt es nicht eine Fehlermeldung, „Hey, du hast nichts eingeben, für mich zu lesen“?

#include <stdio.h>

int main()
{
    printf( "blah \n" );
    getchar();
    return 0;
}
War es hilfreich?

Lösung

Die getchar() Funktion wird einfach warten, bis es ein Zeichen empfängt, das Programm hält, bis es funktioniert.

ist ein Zeichen gesendet, wenn Sie drücken Sie die Enter-Taste; unter einem Windows-Betriebssystem, wird es einen Wagenrücklauf (CR) und Zeilenvorschub (LF).

senden

Siehe diese Coding Post für ein schön setzen Erklärung.

(... die Erklärung des CR + LF Teils, nicht der getchar() Sperrteil)

Andere Tipps

Das ist, weil getchar () ist eine Sperrung Funktion.

Sie sollten über Sperrfunktionen , die im Grunde den Prozess machen warten für etwas passiert.

Bei der Implementierung dieses warten Verhalten von der Funktion abhängig ist, aber in der Regel ist es eine Schleife, die für ein Ereignis wartet passieren.

Für den Fall der getchar() Funktion, ist dies wahrscheinlich als Schleife implementiert, die ständig eine Datei liest (für diesen Fall stdin) und prüft Wetter die Datei geändert wird. Wenn die Datei geändert wird, verhält sich die Schleife durch etwas anderes zu tun.

Versuchen Sie folgendes:

#include <stdio.h>

int main(int argc, char *argv[])
{
    char ch;

    printf("I'm now going to block until you press something and then return... ");

    ch = getchar();

    if (ch >= 0)
       printf("\nYou pressed %c\n", ch);
    else
       printf("\nAliens have taken over standard input! Run!\n");

    return 0;
}

getchar() wird Ihr Programm führen zu gehen, bis eine Tastatur schlafen (oder was auch immer zu stdin angeschlossen ist) unterbricht empfangen wird. Das bedeutet, es blockiert, kein zusätzlicher Code bis getchar() kehrt ausgeführt wird.

Es ist sehr, sehr hilfreich bei dem Rückgabewert schauen eine Funktion, um es zu verstehen.

kann eine beliebige Funktion blockieren, es sei denn es einen Mechanismus bietet eine Blockade zu vermeiden. Zum Beispiel erlaubt open() eine O_NONBLOCK Flag, das zum Öffnen langsam reagieren Geräte wie Modem hilfreich. Kurz gesagt, wenn es eine Eingabe von einem Terminal bekommt oder warten muss eine Antwort aus dem Kernel oder ein Gerät zu bekommen, gibt es eine sehr gute Chance, es könnte blockieren.

getchar () blockiert Ihre Programmausführung, bis eine Taste gedrückt wird. Also, es ist kein Fehler, wenn keine Taste gedrückt wird, getchar () wird warten, bis es geschehen:)

Sie können mehr darüber erfahren, wie getchar verhält sich hier: http://www.cppreference.com/wiki/c/io/getchar ... dies sollte Ihre Frage beantworten:)

Ich denke, was Sie verwirrt ist, dass die Enter-Taste erforderlich ist, vor dem das Programm fortgesetzt. Standardmäßig wird das Terminal alle Informationen puffern, bis Enter gedrückt wird, bevor auch sie dem C-Programm zu senden.

finden Sie unter Diskussion Problem hier eingeben

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top