cin und Escape
-
Wie schaffe ich es in folgenden Code:
//[...] int laenge; //[...] if(option==1) { cout<<"Geben sie eine Laenge ein(Esc zum abbruch)\n\tEingabe: "; cin>>laenge; } //[...]aus dem if Block mit Esc Raus zu springen???
-
Das wird schwierig (und erfordert vermutlich systemspezifische Funktionen). Die elegantere Lösung dürfte es sein, eine andere Kennung als Abbruch zu verwenden (z.B. -1).
-
Ich dachte mir schon, dass es schwierig würde, aber dazu habe ich ja ein forum voller kompetenter Leute.^^
Ich mag -1, aber nicht, denn es heisst ja nicht um sonst "escape"!
-
Du kannst auch E S C eingeben und anschließend per
cin.fail()nachfragen, ob die letzte Eingabe als Zahl interpretiert werden konnte
(jenseits des ANSI-Standards würde mir noch einfallen, die Eingabe zeichenweise per getch() einzulesen und jedes Zeichen einzeln auszuwerten (ESC hat afaik den Wert 27, ENTER ist \n) - wie du dann die Eingabe in eine Zahl umwandeln kannst, verrät dir die FAQ (Einmal String nach Zahl und zurück))
-
Nett, das du es versuchst, aber auf einer Tastatur ist eine Teste Esc um die es mir ging und ich wollte keine andere Lösung.
==>mir geht es ums Prinzip//Ist auch wenn's vllt so rüber kommt echt nicht bös gemeint!!!
//Wirklich!!!
-
dann bleibt noch immer die Lösung mit getch() (sieht etwas übel aus, aber zur Not kannst du es in eine Funktion auslagern):
char ch;string input; do { ch=getch(); if(ch==27) exit(0);//eventuell auch etwas sanfter ;) input.push_back(ch); } while(ch!='\n'); laenge=atoi(input.c_str());Edit: Hauptnachteil dieses ansatzes ist, daß es nicht mehr portabel ist
-
CStoll schrieb:
Hauptnachteil dieses ansatzes ist, daß es nicht mehr portabel ist
Wegen dem atoi oder warum???
Wenn man:
char ch;string input; do { ch=getch(); if(ch==27) break; input.push_back(ch); } while(ch!='\n'); if(ch!=27)laenge=atoi(input.c_str());schreibt, brauch man das exit(0) nicht!
-
volkard schrieb:
nö. wer in c++ exit(0) aufruft, beschwört dicke probleme herauf.
Sucht nicht, es ist aus dem, allen regelmäßigen foren-Besuchern bekannten, thread: "Was genau bringen exceptions" in dem es ja eine Schlach zwischen ein paar idiotischen unreg's und ein paar reg's gegeben hat.
-
Jetzt hat ich grad die Frage vergessen:
Warum hat volkard das geschrieben???
-
Weil exit(0) das Programm sozusagen durch die Wand beendet, und dabei keine Destruktoren mehr ausführt. Dann besser eine emergency_exit Exception werfen, die in main() gefangen wird und ein return auslöst.
-
Danke, wieder was gelernt!!
-
3DG schrieb:
CStoll schrieb:
Hauptnachteil dieses ansatzes ist, daß es nicht mehr portabel ist
Wegen dem atoi oder warum???
Nein, wegen dem getch().
-
Inwiefern ist getch() nicht portabel???