tastaturpuffer



  • Guten Abend!

    Ich suche und suche und finde keine richtige Erklärung zum Tastaturpuffer... Und das nicht einmal in dem Buch "C von A bis Z". Leute folgendes :

    int main(void) {
       char a,b,c;
       printf("1. Buchstabe : ");
       scanf("%c",&a);
       printf("2. Buchstabe : ");
       scanf("%c",&b);
       printf("3. Buchstabe : ");
       scanf("%c",&c);
       printf("Sie gaben ein : %c %c %c ",a,b,c);
       return 0;
    }
    

    Resultat : 1. Eingabe ist möglich --> Eingabe wird in der var "a" gespeichert
    2. Eingabe ist nicht möglich --> weil angeblich das Return im Puffer bleibt ("\n")
    3. Eingabe ist wieder möglich. Nun meine Frage :
    Wieso wird nur "a" aus dem Puffer genommen , \n aber nicht. Wieso wird denn \n nicht mit a zusammen aus dem Puffer genommen, bzw. einfach gelöscht? Und wiso ist denn die zweite Eingabe nicht möglich? Sagen wir mal \n ist noch im Puffer. Es ist also gespeichert. Also dürfte etwas gespeichertes ja keine Auswirkung auf unsere 2. Eingabe haben... Und wieso ist denn die 3. Eingabe wieder möglich , obwohl wir bei der 2. Eingabe ebenfalls Return gedrückt haben. Für eine Erklärung wäre ich sehr dankbar. Und evtl. noch einige gute Links wo solche grundlegenden Sachen erklärt sind, woher soll ich denn sonst so etwas lernen.



  • Ich kann dir zwar nicht alles genau beantworten aber:

    null schrieb:

    Wieso wird nur "a" aus dem Puffer genommen , \n aber nicht. Wieso wird denn \n nicht mit a zusammen aus dem Puffer genommen, bzw. einfach gelöscht?

    Weil ein char ja auch nur ein char groß ist, also passt auch nur ein a rein, mehr nicht.



  • Du das kann aber nicht sein : scanf intepretiert "\n" für die Returntaste auch als ein char ??? Das kann doch nicht sein. Ich dachte scanf würde immer nur ein char aus dem Puffer rausholen "\n" für Returntaste sind aber zwei chars ( Das "\" & das "n" ) . Und wie kommt es dazu : Im Tastaturpuffer wird doch jede Eingabe gespeichert ( sprich einzelne chars ) . Wieso wird "\n" als ein char behandelt?



  • Die Zeichenfolge \n besteht nur im Quellcode aus zwei Zeichen - zur Laufzeit ist das ein einzelnes char (afair 0x13). Und scanf() holt sich einfach nur das nächste Zeichen, das im Eingabepuffer steht - und das ist bei der zweiten Eingabe das \n.

    (PS: Bitte benutz nicht fflush(stdin), um das zu entsorgen)


Anmelden zum Antworten