Fehler abfrage
-
Hallo wenn ich bei meinem Programm mehr als 11 Zahlen eingebe oder 1 Buchstaben eingebe dann geht das Programm immer in die Endlosschleife.
Wie kann ich das verhindert was mache ich da falsch?
#include <iostream> using namespace std; int main(int argc, char* argv[]) { int ein; bool error; do { cout<<"eingabe: "; cin>>ein; if (ein==1) { cout<<"ok 1"; } if (ein==2) { cout<<"ok 2"; } if (ein!= 1 && ein != 2) { cout<<"err"<<endl; error = true; } } while(error == true); system("PAUSE"); }
-
Schau mal nach was die größte Zahl ist die man in nem int speichern kann

Wobei das egal ist. Sobald du eine Zahl die nicht 1 oder 2 ist eingibst landest du in einer Endlosschleife.
error wird auf true gesetzt und nie wieder verändert.
Weiters wird error auch kein Wert bei der Initialisierung zugewiesen. Somit kann da irgendwas drinnen stehen (true oder false ist reine Glückssache weil nicht definiert).Was versuchst du denn zu bauen?
-
Das hat damit nichts zu tun. In der Regel haben Buchstaben so einen kleinen Wert, dass sie locker in einen int passen. Das Problem ist, er hat keinen int eingegeben, wenn er einen Buchstaben eingibt. Dadurch wird im Stream ein Fehlerstatus gesetzt. Folgendes Codesnippet wiederholt sich solange, bis ich eine gültige Zahl eingebe:
int a = 0; do { cin.sync(); cin.clear(); cin >> a; } while(cin.fail()); cout << a << endl;Und da err die Eingabe in der Schleife hat, entsteht die Endlosschleife, weil er was falsches eingibt und der Stream unbrauchbar ist. Durch das Zurücksetzen kann der Stream wieder benutzt werden und die Eingabe sollte wieder greifen.
Außerdem solltest du Variablen immer initialisieren err. Bei einer Variablen vom Typ bool, muss man nicht gegen true vergleichen, die Bedingung ergibt wahr und wird aufgeführt, wenn in der Variablen true steht und true==true ergibt true, daher macht es recht wenig Sinn:
bool error = false; if(error) { /* wird nicht ausgeführt */ } if(!error) { /* wird ausgeführt, da false negiert wird */ }Greetz
-
ty cin.clear(); cin.sync(); damit geht es.