Tasten sperren möglich?



  • Hallo,
    ich bräuchte eine Möglichkeit, bei einer Konsolenanwendung von Vornherein bestimmte Tasten komplett zu sperren, so dass sie im weiteren Programmablauf ignoriert werden.

    Ich hatte zunächst bei Eingabemöglichkeiten mit einem iswalpha-Filter gearbeitet, aber das hat mich nicht ganz glücklich gemacht.

    MfG
    Aura



  • An welche Tasten denkst du da? An irgendwelche systemweiten Tastenkombinationen oder mehr an Dinge wie die 'A'-Taste?

    Willst du trotzdem noch per cin bzw. scanf() einlesen?

    MfG SideWinder



  • hallo,

    erst mal sorry weil ich so spät reagiere.

    Hauptsächlich sollen bei der Eingabe schlicht die Verarbeitung von Zahlen und Sonderzeichen und ggf. die F-Tasten ausgeschlossen werden.
    Tastenkombinationen kann man bei der ganzen prüfung mal außen vor lassen.

    cin muss nicht unbedingt sein.

    MfG
    Aura



  • Bau eine Schleife mit getch()-Aufrufen, wenn die Taste okay ist füg sie an den String dran und gib sie aus, wenn nicht, dann nicht 🙂

    Mit Hilfe der Suche solltest du da auch vieles finden.

    MfG SideWinder



  • so hatte ich es auch gemacht.
    nur kann ichs drehen wie ich will, sobald in den string mehr als 20 zeichen eingegeben werden, schmiert das programm mit einem zugriffsfehler ab.



  • Lass mal den Code sehen.

    MfG SideWinder



  • #define charcomp (iswalpha(ch) || ch == 32)
    
    	char ch;
            string zeile;
    	int i = 0;
    
    	 while((ch=getch()) != '\r')
    	 {
    		 if (charcomp)
    		 {
    				zeile[i] = ch;
    				cout<<ch<<endl;
    				i++;
    	         }
    	 }
    


  • Zuerst zum Stil: Dein #define tut weh und muss sofort entfernt werden *g*, aber der Fehler liegt woanders.

    Ein String (also deine Variable zeile) hat zu Beginn keine unendlich große Länge sondern die Länge 0. Das nicht sofort beim ersten Schleifendurchlauf zeile[i]=ch abstürzt liegt an der internen Implementierung von std::string. Das lässt du dir aber am besten späer mal erklären und nimmst es jetzt einfach mal so hin.

    Also entweder stattdessen "zeile += ch", dann holt der auch mehr Speicher oder du weißt bereits am Beginn wie groß dein String sein wird und übergibst das dem Konstruktor.

    MfG SideWinder


Anmelden zum Antworten