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