Konsolenprogramm aufhalten - die ganze Wahrheit?



  • Hi,
    Gewöhnlich nehme ich

    cin.get()
    

    zum Aufhalten eines Konsolenprogrammes!
    Nun hab ich vor ner Weile gehört dass das nicht überall funktioniert, mein C++-Lehrer(meiner Meinung doof, da er die Sachen immer komplizierter macht als es sein muss) nimmt sogar das borlandspezifische

    while(!kbhit())
    

    .
    Viel zu kompilziert!
    Wenn

    cin.get()
    

    nicht funktioniert, liegt das nicht einfach am Puffer, was man mit:

    cin.clear();
    cin.sync();
    cin.get();
    

    beheben kann?
    Ich find das persönlich einfach und bisher hat es immer funktioniert 🙂

    Danke und Tschö

    (Es muss ja nicht immer eine Frage sein 😛 )



  • Cool! Danke! (wegen dem letzten Codeschnipsel)

    Aber zu dem !kbhit(). Das benutze ich in einer Schleife, weil das ja Püft ob eine Taste gedrückt wurde, wenn ja soll er abbrechen, wenn nein, weitermachen. Kennt jemand sonst eine andere Idee???

    Achja, ich benutze VSC++.net2003 (womit kbhit() auch funzt).

    Code-Hacker



  • while(!kbhit())
    

    Halte ich unter windows für etwas problematisch, da es die CPU auslastung auf die 100% reißen sollte, oder sehe ich das falsch??

    Tip: Schau dir doch mal die wait() Funktion aus der Konsolen FAQ an, die da lautet:

    void wait () 
    { 
        std::cin.clear (); 
        std::cin.ignore ( std::cin.rdbuf () -> in_avail () ); 
        std::cin.get (); 
    }
    

    Sieht also recht ähnlich aus , oder?? 😉



  • cin.sync ist manchmal aber unverzichtbar
    und bevor ich einem while(!kbhit()) 100%CPU gebe nehm ich sleep und davor die wait funktion - wenn ich das programm nicht sovieso aus der konsole raus starte und es so klein ist, dass es gleich beendet



  • Funktionstasten u.a. liefern leider zwei Zeichen an die StdIn....

    die "richtige" Varinate wäre:

    while (kbhit()) getch();
    if (!getch()) getch();
    

    Aber jetzt hab ich mich wahrscheinlich zu "noch blöder als Info-Lehrer" gestempelt :schäm:

    btw. kbhit + getch() sind schon platform-spezifisch, aber ich bins halt so gewohnt 😉



  • peterchen schrieb:

    Aber jetzt hab ich mich wahrscheinlich zu "noch blöder als Info-Lehrer" gestempelt :schäm:

    btw. kbhit + getch() sind schon platform-spezifisch, aber ich bins halt so gewohnt 😉

    nö du hast dich disqualifiziert weil hier ist ein STANDARD C++ forum und die conio.h ist nicht im Standard enthalten ! .. kommt erschwerend hinzu ..



  • gut dann wenigstens (if !cin.get()) cin.get();

    wer sagt denn daß ich conio brauche - extern "C" kbhit() tut' auch... 🤡



  • peterchen schrieb:

    gut dann wenigstens (if !cin.get()) cin.get();
    wer sagt denn daß ich conio brauche - extern "C" kbhit() tut' auch... 🤡

    nunja ..
    kbhit ist nicht wirklich os unabhängig
    und conio ist nicht ide unabhängig ..

    red dich nicht raus die einzige antwort ist cin.get() ...



  • Frage, welche der Methoden die jetzt alle ganannt werden ist der "beste" Ersatz für kbhit()???

    Code-Hacker



  • Es wurde kein Ersatz für kbhit genannt. Es gibt im Standard auch keine Funktion, die kbhit ersetzen könnte. Wenn du kbhit brauchst, musst du kbhit verwenden, oder eine andere äquivalente plattformspezifische Funktion.



  • Axso. Ich dachte mit eine der ganannten Funktionen könnte man prüfen ob eine Taste gedrückt wurde oder nicht, sprich das man eine Schleife so lange laufen lässt bis eine Taste gedrückt wurde.

    Code-Hacker



  • Und es ist wahr, die Prozessorleistung wird bei while(...) wirklich auf 100% gereizt.

    MfG MAV



  • Also wenn nicht ausgelesen werden soll, welche Taste gedrückt wurde ginge auch

    system("Pause");
    

    wenn es sich um ein Konsolen- oder DOS-Programm handelt.



  • Dago schrieb:

    Also wenn nicht ausgelesen werden soll, welche Taste gedrückt wurde ginge auch

    system("Pause");
    

    wenn es sich um ein Konsolen- oder DOS-Programm handelt.

    Du hast eben deine Todesurkunde unterschrieben *fizz*

    Warum sieht eigentlich niemand in der Konsolen-FAQ nach wenn es sich um ein Konsolenproblem handelt?

    Sehr enttäuscht von den Forenusern...

    MfG SideWinder


Anmelden zum Antworten