Tastendruck erkennen



  • Hallo
    Ich habe ma wieder ein Problem...
    Ich will nämlich das mein Programm erkennt welche Taste gedrückt wird. Bei ESC oder so ist das ja kein Problem aber z.B. bei Pfeil rinter...
    Die Tasta sendet ja dann erst 0 und dann 81 soweit ich das verstanden hab...
    Also muss ich ja 2 Abfragen machen zuerst eine für 0 und dann für 81 aber bei mir funktioniert des net so richtig...

    switch(c=getch())
    {
       case 27:
          end = 1;
          break;
       case 0:
          if(c=getch() = 81)
          {
             cout << "Bild runter\n";
          }
          break;
    }
    

    Doch das Funktioniert i-wie net...was mache ich falsch?
    MfG the-coder 🕶



  • == ist vergleich



  • hm... funktioniert auch nicht...:(

    gibt es eigentlich auch ne andre möglichkeit als getch()?
    eine wo das programm nicht darauf wartet das man etwas macht sondern es dabei weiterläuft?
    Kompliziert ausgedrückt, aber wisst ihr was ich meine?

    the-coder



  • So hab ich das Problem mal gelöst:

    unsigned char taste;
    if(kbhit())
    {
    	taste=_getch();
    	if(taste == 224)
    	{
    	        taste=_getch();
    		if(taste== 80)
    		{
                        //runter
    		}
    		else if(taste==72)
    		{
    		    //hoch
    		}
    }
    


  • hm..bei mir funzt das i-wie nicht 😞
    hier der code:

    #include <iostream.h>
    #include <stdio.h>
    #include <conio.h>
    
    void main()
    {
            unsigned taste;
    
            if(kbhit())
            {
                taste=_getch();
                if(taste == 224)
                {
                        taste=_getch();
                    if(taste== 80)
                    {
                                cout <<"Runter" << endl;
                    }
                    else if(taste==72)
                    {
                        //hoch
                    }
                }
            }
            getchar();
    }
    

    Was kann ich denn noch falsch machen?

    the-coder



  • Die richtige Headerdatei einbinden.welche es bei kbhit() ist weiss ich immo leider nicht aus dem stegreif, schau halt mal in der msdn nach.

    Edit:
    Achja du solltest noch ne Endlosschleife herum machen

    while(1)
    {}

    Sonst kanns ja nich gehen 😉



  • hm...ist die headerdatei nicht conio.h?
    Ich jetzt mal ne Endlosschleiße drum gemacht aber trotzdem funzts net..

    #include <iostream.h>
    #include <stdio.h>
    #include <conio.h>
    
    void main()
    {
            unsigned taste;
    
            while(1)
            {
                    if(kbhit())
                    {
                    taste=_getch();
                    if(taste == 224)
                    {
                            taste=_getch();
                            if(taste== 80)
                            {
                                    cout <<"Runter" << endl;
                            }
                            else if(taste==72)
                            {
                            //hoch
                            }
                    }
                }
            }
    }
    

    Ich hätt net gedacht dass das so schwer ist 😮

    Es ligt auf jeden fall daran das die zweite if abfrage immer ein false zurückgibt. Wenn ich nämlich anstatt die 224 die 27 für ESC einsetzte funzts.



  • Sag mal deine Fehlermeldung



  • Er gibt keine Fehlermeldung. Ich hab den obrigen beitrag editiert.
    edit:
    Ok es hat soweit geklappt...meine tastaturtabelle war falsch, bzw hatte mcih was verguggt
    the-coder



  • Ne hab nen Tippfehler gehabt, muss natürlich

    unsigned char taste;
    

    lauten 😉



  • nee klappt auch ohne...
    aber ich werds ma davorschreiben:)
    tschuldigung die frage aber was hat es mit unsigned auf sich?
    hatte damit noch nie zu tun und habs noch nirgendwo gesehen 🙄



  • the-coder schrieb:

    Er gibt keine Fehlermeldung. Ich hab den obrigen beitrag editiert.
    edit:
    Ok es hat soweit geklappt...meine tastaturtabelle war falsch, bzw hatte mcih was verguggt
    the-coder

    Ein kleines Programmchen, mit dem du den Code bekommen kannst.

    #include "stdafx.h"
    #include <stdio.h>
    #include <stdlib.h>
    #include <process.h>
    #include <time.h>
    #include <conio.h>
    
    void main()
    {
    	while(1)
    	{
    	int temp;
    	temp=getch();
    	printf("%d\n",temp);
    	}
    }
    


  • the-coder schrieb:

    nee klappt auch ohne...
    aber ich werds ma davorschreiben:)
    tschuldigung die frage aber was hat es mit unsigned auf sich?
    hatte damit noch nie zu tun und habs noch nirgendwo gesehen 🙄

    unsigned ist "vorzeichenlos".



  • OK gut num habe ich alles was ich brauch riesengroßes thx an dich 🙂



  • the-coder schrieb:

    OK gut num habe ich alles was ich brauch riesengroßes thx an dich 🙂

    Kein Problem 🙂


Anmelden zum Antworten