F1-Tastendruck abwarten



  • Kann mir jemand sagen, wie man mit reinen Ansi-C Befehlen unter DOS den Tastendruck F1 abwartet?

    Ich moechte das Programm halt auf die einzelnen Funktionstasten reagieren lassen.



  • http://www.c-plusplus.net/forum/viewtopic-var-t-is-39324.html

    //EDIT
    Die URL in der FAQ scheint nicht mehr zu funktionieren.
    Hier die Tastencodes:
    http://www.datasource.de/programmierung/tab01_tastaturcodes.html



  • Mit welcher Funktion lese ich das dann aus?

    den charakter a koennte ich ja wie folgt auslesen:

    while(getchar!='97')

    aber wie wuerde das dann mit der Taste F1 funktionieren?



  • Habs grad mal ausprobiert, aber der es funktioniert nicht ...

    Mein code:

    #include <stdio.h>
    
    void main()
    { 
       char a;
       char b;
       printf("Taste druecken\n"); 
       getchar();           /*wait for key*/ 
       system("cls");
    
       a=getch();
       b=getch();
       while((a!='0')&&(b!='59'))
       {
          printf("Bildschirm geloescht\n"); 
          a=getch();
          b=getch();
       } 
    } //end main
    


  • #include <stdio.h>
    #include <conio.h>
    
    void main()
    {
    	char c;
    
    	while (1) {
    
    		switch(c=getch()) {
    		case 27: printf("ESC\n");
    			break;
    		case 59: printf("F1\n");
    			break;
    		case 60: printf("F2\n");
    			break;
    	        }	
           }
    }
    


  • Bitfresser_ST schrieb:

    Kann mir jemand sagen, wie man mit reinen Ansi-C

    eigentlich gar nicht. Am Besten nimmst du eine OS abhängige Bib.



  • Dieser Thread wurde von Moderator/in AJ aus dem Forum ANSI C in das Forum DOS und Win32-Konsole verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Eigentlich ging es mir um reines Ansi-C. Meine Frage wurde zwar beantwortet, aber ich verstehe nicht, warum sie in zu DOS-speziefischen Probleme verschoben wurde. Na ja ...



  • weil das, was du vorhast, nicht in ansi c geht.
    kannst entweder winapi nutzen, oder im konsolenfaq den tastencode mit getch herholen (nun ist getch aber nicht standard)
    => verschoben 😉



  • Bitfresser_ST schrieb:

    Eigentlich ging es mir um reines Ansi-C. Meine Frage wurde zwar beantwortet, aber ich verstehe nicht, warum sie in zu DOS-speziefischen Probleme verschoben wurde. Na ja ...

    Du hast ja geschrieben, dass du es unter DOS brauchst und wie schon geschrieben wurde, gibt es keine ANSI-C Lösung für dein Problem.

    system("cls") ist übrigens auch nicht ANSI-C. Zumindest nicht das CLS! Um den Bildschirm zu löschen solltest du auch systemabhängige Funktionen benutzen, z. B. clrscr() aus der conio.h (wie auch getch() aus der conio.h stammt).



  • Nun, ich hab mir mal Gedanken gemacht:
    Der Tastendruck hoeherer Tasten laesst sich mit Ansi-C abfragen, und zwar mit getch(). Wenn man eine dieser Tasten drueckt, muss der Tastaturpuffer 2x abgefragt werden. Dafuer hab ich dann auch eine Funktion geschrieben. Sie gibt integer-Werte zurueck, da man bei den hoeheren Tasten nicht mehr mit char-Werten auskommt. Fuer die F1-Taste wird ja 0,59 eingelesen. Ich hab das so geloest, dass ich fuer die 0 den Wert 255 ersetze und den 2. Wert dann aufaddiere. Somit bekommt dann die Taste F1 den Rueckgabewert 314. Die kleineren Tasten kann man sich ja dann wieder zurueckcasten.

    int getupperkey(void)
    {
       char Taste1, Taste2;
    
       Taste1=getch();
       if((int)Taste1!=0)
          return (int)Taste1;
       else
          Taste2=getch();
          return 255+(int)Taste2;
    }
    

    PS: Dass Bildschirmloeschproblem war gar nicht meine Frage ...



  • Was ist denn unter Linux oder Unix anders an getch()? Wie wuerde man denn dort Tasten abfragen?



  • Bitfresser_ST schrieb:

    Der Tastendruck hoeherer Tasten laesst sich mit Ansi-C abfragen, und zwar mit getch().

    getch() ist kein ANSI C.



  • Bitfresser_ST schrieb:

    Was ist denn unter Linux oder Unix anders an getch()? Wie wuerde man denn dort Tasten abfragen?

    hier ein kleines beispiel, und bitte lies mal was nach zu ansi c 🙂
    http://linux-sxs.org/programming/kbhit.html



  • Hmm, soweit ich das verstanden habe, ist die Funktion auch unter Linux erhaeltlich. Aber lassen wir das. Mein Problem ist geloest. Ich wollte eine systemunabhaengige Loesung haben, die Tasten auszulesen. getch() wird wie es aussieht auf Linux und auf Microsoft-Systemen akzeptiert.



  • Bitfresser_ST schrieb:

    Hmm, soweit ich das verstanden habe, ist die Funktion auch unter Linux erhaeltlich. Aber lassen wir das. Mein Problem ist geloest. Ich wollte eine systemunabhaengige Loesung haben, die Tasten auszulesen. getch() wird wie es aussieht auf Linux und auf Microsoft-Systemen akzeptiert.

    Willst du oder kannst du es nicht verstehen?!?

    getch() ist nicht(!) systemunabhängig. Nur weil es Bibliotheken unter MS und Linux gibt, die dir diese Funktion mit der gleichen Funktionalität zur Verfügung stellen, ist es noch lange nicht systemunabhängig und erst recht nicht ANSI-C!

    Es spricht nichts dagegen, dass du getch() benutzt, aber du solltest donnoch wissen, dass es nicht standard und somit auch nicht systemunabhängig ist.

    Bitfresser_ST schrieb:

    PS: Dass Bildschirmloeschproblem war gar nicht meine Frage ...

    Willst du was lernen oder einfach nur ein wenig rumhacken auf der Tastatur? Versuch mal den Befehl CLS unter Linux auszuführen, da wirst du nicht das erwartete Ergebnis bekommen, wenn du nicht bestimmte Packete installiert hast, die MS-Befehle simulieren.

    Vielleicht hast du auch noch nicht ganz verstanden was eigentlich ANSI-C ist.
    ANSI-C ist im Endeffekt ein Standard, der garantiert, dass bestimmte Funktionen bzw. Includes in jedem System vorhanden sind (wozu die conio.h und getch() nicht gehören!).



  • Danke an den unbekannten Mailzusender und an den Poster der in diesem Thread darauf aufmerksam gemacht hat -> Der Link in der FAQ funktioniert wieder 🙂

    MfG SideWinder


Anmelden zum Antworten