Bei getline(std::cin, Data) nicht warten



  • Wie kann ich es machen das bei getline(std::cin, Data); das Programm nicht wartet sondern wenn keine Eingabe da ist trotzdem weiter geht?
    Ich möchte einige Sachen berechnen und wenn wärend der Zeit eine bestimmt Eingabe kommt diese Verarbeitet werden kann.

    Ich kann leider dafür keine Threads benutzen und ich muss als std::string einlesen da die eingabe zimlich lang sein kann.

    Gibt es da so etwas wie keypressed in Turbo Pascal?

    Danke



  • Meines Wissens nach gibt es keine Funktion in Standard C++, die wie keypressed funktioniert. Aber vielleicht unterstützt Dein Compiler die Funktion kbhit() (zu finden in conio.h)? Diese bietet die von dir gewünschte Funktionalität



  • Nobody schrieb:

    Wie kann ich es machen das bei getline(std::cin, Data); das Programm nicht wartet sondern wenn keine Eingabe da ist trotzdem weiter geht?

    Hast du den Puffer geleert?



  • Hallo,

    du kannst das mit der conio.h machen: (AFAIK kein Standard)

    std::string message;
    char token;
    while(true)
    {
    while(kbhit())
    {
    token = getch();
    if(token == 13)
    // Eingabe beendet
    message += token;
    }
    // Mach irgendwas anderes
    }
    

    Lastet den Prozessor voll aus, ein Sleep(1)/sleep(1) reicht schon zur Unterbindung (ebenfalls kein Standard).

    MfG Eisflamme



  • Hi, danke für eure Antworten.

    @Asgard
    Ich habe das mit kbhit() ausprobiert leider liefet dies bei mir immer nur 0 zurück.

    Dazu ist vieleicht zu sagen, dass mein Programm von einem anderen mit geladen wird (Fritz Schach). Es läuft zwar unabhängig und bitted jede funktionalität nur dass alle ein und ausgaben von Fritz abgefangen werden und diese von ihm verarbeitet werden. (anstadt einer Konsole z.b) Dies ist damit man selber 'Schach Engines' schreiben kann. Leider passiert es wenn ich einen weiteren Thread zur zugberechnung einbaue dass alles ca 10 Sekunden zu spät ankommt und dass ist gerade bei Blitzschach zimlich nervend da mann immer verliert da man das ja nicht mit einberechnen kann 😞

    @Master_Max
    Wie meinst du dass mit dem Puffer leeren?



  • Hi, Mis2com
    es tut mir leid ich habe dein Post erst gesehen nachdem ich mein vorausgehendes geschrieben hatte.

    Das was du sagst geht leider auch nicht.
    Da eben kbhit immer null ist.

    Ich habe bereits in speziellen 'Schach Engine Foren' gesucht nur leider nutzen die dort alle Delphi 😞



  • kbhit liefert immer 0?
    Welchen Compiler nutzt du?



  • Ich benutze MSVS .Net 2003 AV



  • 😃 nicht Autoren sondern Acadamic Version 😃



  • Nochetwas wenn ich aus dem ganzen eine konsolenanwendung mache und die Kommandos 'per Hand' eingabe dann klappt kbhit() jedoch leider nicht wenn das Programm von Fritz (oder Arena) geladen wird.



  • Versuch mal GetAsyncKeyState. Schlag die Funktion hier nach: www.msdn.com


Anmelden zum Antworten