Exception Handling Buchstaben rausfiltern
-
Hi, ich bin erst seid ein paar Stunden im c++ Bereich und muss mir alles selber beibringen, also seid bitte nicht so streng für die evtl. blöde Frage.
Habe mir den (überings sehr gut geschriebenen) Artikel über Exception Handling hier im Board angeguckt, und wollte diese Hilfe auf mein Programm anwenden.Erstmal soviel: Das Programm soll eine Eingabe überprüfen, ist sie ein Buchstabe soll nur ein Fehler ausgegeben werden, ansonsten die Zahl.
Nun habe ich das ganze soweit, aber wenn ich einen Buchstaben eingebe wird trotzdem eine Zahl ausgegeben, woran liegt das?
#include <iostream> #include <cstdlib> using namespace std; double AufgabeEingeben() { int aufgabe; cin >> aufgabe; if(isdigit(aufgabe)) { throw int(); } return aufgabe; } int main() { int Result; try { Result = AufgabeEingeben(); cout << Result << endl; } catch(int &Exception) { cout << "fail" << endl; } system("PAUSE"); }Wie gesagt kenn mich nicht aus, aber das isDigit funktioniert eig. z.B. hierdrin funztts so wie es soll:
#include <iostream> #include <cstdlib> using namespace std; int main() { int aufgabe; cin >> aufgabe; if(isdigit(aufgabe)) { cout << "fail"; } else cout << aufgabe; system("PAUSE"); }Soweit erstmal, vielen Dank für eure Hilfe, mfg, Tobi-DS
-
Das liegt vermutlich daran, dass die Variable aufgabe ein int(GanzZAHL) ist. Nimm char(Zeichen)!
-
Oberon00 schrieb:
Das liegt vermutlich daran, dass die Variable aufgabe ein int(GanzZAHL) ist. Nimm char(Zeichen)!
By Chars werden immer Buchstaben erkannt, außerdem liegt es nicht an den Strings, siehe mein 2. Code, der vollständiog funktioniert.
Nur in Verbindung mit dem Exception Handling halt nicht
Bitte nach wie vor um Hilfe, mfg
-
Tobi-DS schrieb:
Oberon00 schrieb:
Das liegt vermutlich daran, dass die Variable aufgabe ein int(GanzZAHL) ist. Nimm char(Zeichen)!
By Chars werden immer Buchstaben erkannt, außerdem liegt es nicht an den Strings, siehe mein 2. Code, der vollständiog funktioniert.
Nur in Verbindung mit dem Exception Handling halt nicht
Doch, genau das ist das. Mit char funktioniert das ganz wunderbar. Das es bei deinem zweiten Code funktioniert, liegt an einem anderen Fehler deinerseits, der dann zufällig auf das richtige Verhalten führt. Dort hat aufgabe nämlich einfach einen zufälligen Wert wenn ein Buchstabe eingegeben wird, weil der stream dem int keinen Buchstaben zuweisen kann. Daher meint dann isdigit, dass es sich nicht um eine Zahl handelt.
-
du solltest dir ganz schnell abgewöhnen integers zu werfen.
wird std::exception oder noch besser std::runtime_error oder davon abgeleitete klassen.
und fang sie mit "catch (std::exception const& e)"