Tastaturbuffer

FireFlow

Erfahrenes Mitglied
Hallo.

Ich bastle gerade einen kleinen Chat mit Server und Client.Das ganze ist eine Konsolenanwendung. Wenn eine Verbindung hergestellt ist überprüf ich einfach in einer while(1)-Schleife ob was auf dem Sock angekommen ist und lese es ggf. aus. Währenddessen kanns natürlich sein dass der Benutzer "Hallo" schreibt oder sonst irgendwas. Nun muss ich irgendwie überprüfen ob was gehschrieben wurde (das geht ja mit kbhit ()) und wenn ja was geschrieben wurde. Die einzigen Möglichkeiten einer Konsoleneingabe die ich kenne ist getch() und cin aber dann wird das Programm unterbrochen und das darf es eben nicht.

Hoffe ich hab mich so ausgedrückt dass es klar ist was ich mein.

Gruss & Danke.
 
moin


Vielleicht:
Code:
if(_kbhit)
     cin.....;

Wenn das auch noch zuviel Unterbrechung ist, musst du dir halt nen Thread machen der einlesen kann und es in ne Variable schreibt, auf die deine anderen Funktionen auch zugreifen können.


mfg
umbrasaxum
 
Hallo! Ich bin zu einer Lösung gekommen aber das ist irgendwie umständlich was nicht direkt an der Lösung liegt sondern an meinen bescheidenen Kenntissen mit dem c-string.

Hier mal ein Beispiel wie das super klappt. Das Programm schreibt alles in den Buffer und gibt es bei Eingabe von ASCII 13 (=Return) aus und löscht den Buffer wieder.

Code:
#include <conio.h>
#include <iostream.h>

void main()
{

    char keyb_buf[256];
    char* keyb_bufp = &keyb_buf[0];
    memset(&keyb_buf,0,sizeof(keyb_buf));


    while(1) {

        // Wenn etwas von der Tastaur wartet
        if(kbhit()) {

            // in den Buffer schreiben
            *keyb_bufp = getch();

            // Wenn es Return ist den Buffer ausgeben
            if(*keyb_bufp == 13) {

                keyb_bufp = &keyb_buf[0];

                while(*keyb_bufp) {
                    cout << *keyb_bufp;
                    ++keyb_bufp;
                }

                cout << endl;

                memset(&keyb_buf,0,sizeof(keyb_buf));
                keyb_bufp = &keyb_buf[0];
            }
            // Zeiger eins weiter
            else {
                keyb_bufp++;
            }

        }

    }


}

Nur ist es eben glaube ich leicht umständlich. Kann mir jemand sagen wie man das mit dem String einfacher hinbekommt?
 
Zurück