ENTER



  • Hi!

    Ich schreib zurzeit ein kleines progamm,
    indem eine bestimmte funktion aufgerufe werden soll,
    wenn ENTER gedrückt wird.
    Allerdings kenn ich bis jetzt für sowas nur "cin>>"
    und man soll ja nicht immer ne zahl dazu eingeben.
    Wer weiß wie man das besser lösen kann?

    MfG
    Canon



  • cin.get();



  • Ne, so meinte ich das nicht.

    Ich habe schonmal gesucht, und den folgenden Beitrag von elise gefunden:

    int main(){ 
        unsigned char chr; 
    
    do 
        { 
        chr=getch(); 
            printf("%i",chr); 
            if ((chr==224) || (chr==0)) 
            { 
                chr=getch(); 
                printf("%i",chr); 
    
                switch(chr) 
                { 
    
                case 13: 
                    printf("go"); 
                        break; 
                    case 75:                             
                        printf("<-"); 
                        break; 
    
                    case 77:                             
                        printf("->"); 
    
                        break; 
    
                    case 83:                             
                        printf("ENTF"); 
                        break; 
    
                    case 82:                             
                        printf("EINF"); 
                        break; 
    
                    case 80:                             
                        printf("pfeil nach unten"); 
    
                        break; 
                    case 79:   
                        printf("ENDE");                             
    
                    break; 
                    case 72:   
                        printf("pfeil nach oben");                             
    
                    break; 
                } 
            } 
        }while(true); 
    
        return 0; 
    }
    

    Allerdings geht das mit enter irgentwie nicht.
    Man grückt die taste, und nichts assiert, obwohl eigentlich "go"
    ausgegeben werden sollte.



  • Liegt an der komischen if Bedingung

    #include <stdlib.h>
    #include <conio.h>
    
    using namespace std;
    
    int main()
    { 
     unsigned char chr; 
    
     do 
     { 
      chr=getch();
      printf("%i\n",chr);  
    
      switch(chr) 
      {  
       case 13: printf("go\n"); 
                break; 
       case 75: printf("<-\n"); 
                break; 
       case 77: printf("->\n"); 
                break; 
       case 83: printf("ENTF\n"); 
                break; 
       case 82: printf("EINF\n"); 
                break; 
       case 80: printf("pfeil nach unten\n"); 
                break; 
       case 79: printf("ENDE\n");                             
                break; 
       case 72: printf("pfeil nach oben\n");                             
                break; 
      } 
     }while(true); 
    
     return 0; 
    }
    

    funktioniert.

    Grüße



  • danke!
    Funzt aber nur wenn man noch

    #include <stdio.h>
    

    hinzufügt.



  • Wofür hat Elise, denn das if überhaupt eingebaut, hatte das dort nen tieferen Sinn, oder war es einfach nur nen Flüchtigkeitsfehler?



  • weil elise viele compiler hat, und ein blick in die faq wirkt wunder 😉

    http://www.c-plusplus.net/forum/viewtopic.php?t=39324&sid=e62b4cec02af2a28a88dea7b14e935bc

    ich würde immer beides abprüfen für die compatibilität.
    so long.



  • Wie elise schon mit dem Thread angedeutet hat, ist der Code ganz einfach für Sondertasten. Darum auch das "komische" if, dass damit voll und ganz seine Berechtigung hat :).



  • Hallo

    Dafür muss man wissen, dass jedes Zeichen, dass man von der Tastatur eingelesen wird und mit getch() wegspeichert, intern wie eine Zahl zwischen 0-255 behandelt wird (Ascii-Code). Wenn man schreibt

    #include <conio.h>
    
    int main (void)
    {
       char cBuchstabe = getch();
    }
    

    und man drück eine 0, dann steht in der Variable eigentlich 48 (Ascii-Code für numerische 0).

    Sonderzeichen sind hier aber eine Ausnahme .... Wenn man z.b. eine Pfeiltaste drückt, dann werde zwei Zahlen übertragen, also eine quasi zweistelliger Ascii-Code.
    Deshalb fragt Elise die Varible nach 224 und 0 ab, weil diese beide Zeichen signalisieren, dass eine Sondertaste gedrück wurde.
    Jetzt muss die zweite Stelle (der zweite Ascii-Code-Teil) mit einer weiteren getch() Anweißung eingelesen und ausgewertet werden.
    Was sie aber übersehen/nicht bedacht/vergessen hat ist, dass Enter keine Sondertaste ist, sondern den Ascii-Code 13 hat. Das heißt, wenn du bei ihrem Programm Enter drückst, dann ruft das Programm den If-Zweig nicht auf und es passiert nichts.

    Hoffe das hilft und trägt zum Verständnis bei 🙂
    Mfg Xatian


Anmelden zum Antworten