"Programm rastet aus"^^
-
also wenn man mittels cin einen integer einlesen will
int main() { int intVariable = 0; std::cin>>intVariable; return 0; }und man gibt dann im programm einen buchstaben ein, dann , wie ich so schön sage, rastet das programm aus. dass heisst dasses ewig das eingegebene abklappert wie in einer schleife welche man nicht unterbrechen kann...
gibt es einen weg das zu umgehen?
-
Schau mal hier, wie du das handhaben musst:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-125991-and-highlight-is-.html
-
0.0 ok aber ich kann da drin nix sinnvolles für mich erkennen auser irgendwelchen failbits ^^
-
Dann solltest du den Thread nochmal richtig lesen.
"input" in dem Thread ist ein Eingabestream, wie auch cin es einer ist und da dort auch die Möglichkeit (allerdings aus einer Datei) besteht statt einer Zahl ein '-' (also ein Zeichen) zu beginn einzulesen, entspricht es deinem Problem.
-
du kannst nicht intvariable als 0 bestimmen wenn dus per eingabe bestimmen willst...^^
-
Man darf eine Variable nicht initialisieren, wenn man ihr einen Wert zuweisen will der von der Standardeingabe kommt? Wohl kaum.
-
Also,....
du hast eine int Variable! Jetzt ließt du mit cin und den >> operatoren was da rein...
Ist dies bzw sind das Zahlen dann gibts keine Probleme.
Aber solltest du jetzt ein Zeichen da einlesen wollen da läuft das ganze so ab.operator>> nimmt das Zeichen und steckt es in einen Puffer.
Dann merkt er das die Zeichen im Puffer nicht mit dem Zieltyp(dein int) kompatibel sind, deswegen setzt er das iostate failbit auf 1.Die Streamklassen haben folgende Iostate-Objekte (diese geben Information über den Status deines Streams):
badbit --> Schwerer Fehler. Datei futsch oder sonstwas.
failbit --> Fehler bei I/O-Operationen. Deinem Stream aber geht es gut
eofbit --> "sagt der name schon aus"
goodbit --> Keiner der drei anderen flags ist gesetzt.Nun ist es ja logisch das failbit gesetzt wird, denn es trat ja ein I/O Fehler auf!
Um das also abzufragen musst du mit der Elementfunktion fail() den Zustand von failbit abfragen.
Dieser gibt dir natürlich dann 1 zurück wenn du ein Fehler wie bei dir hast.
Nun weißt du ja das du ein Fehler hast, also musst du ihn ja beheben und den Stream wieder "einsatzfähig" machen.Mit der Funktion clear() löschst du erstamls alle Fehlerflags.
Jetzt aber stehen die Zeichen immer noch im Puffer, diese "ignorierst" du dann mit der Funktion ignore().Danach kannst du mit wieder normal arbeit

int var; ... cin >>var; if(cin.fail()) { cin.clear(); cin.ignore(); } ...Das sollte doch auch funktionieren oder ?
int var; ... cin >> var; if(cin.fail()) { cin.clear(); std::string s; cin >> s; } ...Hier noch ein guter Link zu der Geschickte mit den Flags und so:
http://fara.cs.uni-potsdam.de/~kaufmann/?page=GenCppFaqs&faq=eof#Answ