getch() will nicht so wie ich will...



  • Habs so geändert :

    void tast(void)
    { 
      int chr;
      fflush(stdout);
      getch();
      fflush(stdout);
      chr = getch();
      printf("Es wurde der Buchstabe %c eingegeben", chr);
      getch();
    }
    

    Nunja, nun wird zB "Es wurde der Buchstabe s ausgegeben" angezeigt, allerdings musste ich noch mit Enter bestätigen bevor der String ausgegeben wurde...

    Dann hab ich das erste fflush und getch weggelassen, nun wird es wie am Anfang angezeigt : nur ein Zeilenumbruch 😕 Ich bin irgendwie zu dumm dafür 😃



  • OH!
    stdin, nicht stdout! Sry...

    Hm. Erklär mir mal, warum du in der Funktiom 3 mal getch() aufrufst.



  • Gärtner schrieb:

    OH!
    stdin, nicht stdout! Sry...

    Hm. Erklär mir mal, warum du in der Funktiom 3 mal getch() aufrufst.

    Ähm weiß ich selber nicht genau, ich probier einfach mal 😉 Viel kaputtmachen kann ich ja nicht. Also das chr = getch() soll ja das Zeichen in die Variable speichern. Das letzte getch(); soll das Programm einfach nur in "Wartezustand" setzen damit es sich nicht sofort nach Ausgabe schließt. Das erste hab ich einfach zu Testuwecken eingebaut.

    Sooo und bei stdin muss man immernoch mit Enter bestätigen 🙄 😞

    void tast(void)
    { 
      int chr;
      fflush(stdin);
      chr = getch();
      printf("Es wurde der Buchstabe %c eingegeben", chr);
      getch();
    }
    

    P.S.: Ich finds super, dass in dem Board hier kein Registrierungszwang besteht 😉



  • http://www.c-plusplus.net/forum/viewtopic-var-t-is-39320.html
    Alles was du brauchst: kbhit() 😉

    P.S.: Ich finds super, dass in dem Board hier kein Registrierungszwang besteht 😉

    Ganz deiner Meinung!



  • Ich möchte ja nicht nerven, aber...

    😃 Ich bin wirklich zu dumm dafür 😃

    Es wäre sehr sehr nett, wenn du mir ein Beispiel schreiben könntest dass so ungefähr das ausführt wie in der Auflistung im ersten Thread beschrieben. (Also zumindest den ersten u. Zweiten Punkt der Liste mit dem einlesen , den Rest schaff ich glaube ich alleine).



  • 😞 Ich bin müde.

    void tast(void)
    {
      int chr;
    
      fflush(stdin);
      do{  
        chr = kbhit(); 
      }while(chr==0); //auf Tastendruck warten
      printf("Es wurde der Buchstabe %c eingegeben", getch()); //dann ausgeben
    }
    

    Kein Anspruch auf Richtigkeit. Gute Nacht. In 5 min bin ich weg, wenn du noch ne Frage hast, beeil dich.



  • Man muss immernoch mit Enter bestätigen ? Ich kapier es langsam selber nicht mehr. Ich verwende Dev-C++ als Software ? Ist die irgendwie Falsch ?



  • ...
    }while(chr==0); //auf Tastendruck warten
      printf("Es wurde der Buchstabe %c eingegeben", chr);
    }
    

    Probiers. Aber die Wahrscheinlichkeit, dass es geht, ist minnimal. Bitte lies dir den Link oben durch.



  • Naja ich werds noch weiter Probieren. Dir wünsche ich eine Gute Nacht 🙂 und Danke für deine Hilfe.



  • Warum hilft dem armen Mann denn niemand? 😃

    fflush(stdin) ist Mist, weil undefiniert. Siehe hier

    Dass Du zuerst mit Enter bestätigen musst, bevor das Programm anfängt, die Eingabe zu verarbeiten, liegt an der Eingabepufferung, an der Du auch mit Standardmitteln nichts ändern kannst. Ich schätze, die Improved Console kann das für Dich leisten.

    kbhit ist Bestandteil von Borland C (imho), nicht jedoch von Visual C++ oder MinGW. Sie gehört keinesfalls zum Standard, ist aber auch durch die Improved Console abgedeckt.

    EDIT:
    Der alte Beitrag von SideWinder ist von 2002, das gilt heute nur noch begrenzt, da die conio.h sogut wie nirgendwo mehr beiliegt. Siehe Improved Console 😉

    EDIT2:
    Hab jetzt erst mitbekommen, dass die IC eine C++ Bibliothek ist (bzw. das Forum, in dem ich bin verschwitzt :D), das könnte jetzt natürlich problematisch werden 😞



  • Hmm ich hab mir dennoch den alten Beitrag mal richtig durchgelesen und die anderen Befehle probiert. Und es funktioniert ! Benutze ich getche() statt getch() , dann muss ich nicht mit der Enter Taste bestätigen.

    void tast(void)
    {
      int chr;
    
      fflush(stdin);
      do{  
        chr = kbhit();
      }while(chr==0);
      chr = getche();
      printf("Es wurde der Buchstabe %c ( %i ) gedrückt",chr,chr);
    }
    

    ^ Das Funktioniert. Und das ist guuut 😃 Ich denke vorerst ist mein Problem geklärt 🙂 Danke an den Gärtner und an dich, LordJaxom (auch wenn dein Beitrag sich eher an C++ richtet 😉 ) - Problem gelöst.



  • Okay, versuche wenigstens nochmal, ob es auch ohne fflush(stdin) funktioniert, denn wenn nicht, könnte es sein dass das Ganze mit dem nächsten Compiler nicht mehr funktioniert.

    (Sofern der noch getche an Bord hat ;))



  • Es funktioniert Teilweise 😮 Also man muss zwei Tasten drücken, nur die Zweite wird dann in die Variable gespeichert (gleicher Quellcode wie oben nur ohne fflush).



  • Gast_Kaktus621 schrieb:

    Es funktioniert Teilweise 😮 Also man muss zwei Tasten drücken, nur die Zweite wird dann in die Variable gespeichert (gleicher Quellcode wie oben nur ohne fflush).

    Ne vertan, entschuldigung 😉 Es funktioniert normal, hab mich nur vertan...


Anmelden zum Antworten