Eingabe beendet ungewollt Programm

wassertropfen

Grünschnabel
Servus Leute!

Ich hab folgendes Problem mit C++ in Visual Studio 2008:

Ich prüfe eine Eingabe mit:

Code:
...
int eingabe;

cout << "Bitte eine Ganzzahl eingeben: ";
if((cin >> eingabe) == false)
{
cout << "Falsche Eingabe";
}
...

Wenn ich nun Debugge und z.B. h344 eingebe, müsste ja auf der Konsole
Falsche Eingabe erscheinen.

Doch stattdessen wird das Programm einfach beendet (obwohl noch haufenweise
Anweisungen folgen würden).

(Keine Angst, Tricks wie getchar(), cin.get()... wird auch alles verwendet)

Nun die Frage:
Liegt das an einer Einstellung in der Entwicklungsumbegung, also VS 2008
oder muss man den Code ändern?

Danke schon mal im voraus!
 
Das hab ich auch in der msdn gelsen, trotzdem fällt mir keine Lösung ein, die nicht zum Beenden des Programmes führt

try/catch hab ich auch schon probiert
 
Hi.

Wenn sich ein Stream in einem Fehlerzustand befindet, dann kann keine Eingabe/Ausgabeoperation auf diesem Stream erfolgreich ausgeführt werden.

D.h. wenn ein Wert im falschen Format eingegeben wurde, dann mußt du den Streamzustand wieder auf "good" setzen, damit du mit dem Stream weiterarbeiten kannst.
C++:
if (!cin.bad() && !cin.eof()) {
  cin.clear();
}
Die Meldung "Falsche Eingabe" wird nicht ausgegeben weil du den Streampuffer nicht leerst. Entweder mit "flush" oder mit "endl". Und für die Fehlerausgabe solltest du lieber cerr verwenden.

Gruß
 
Also, ich hab den Programmteil nun so geändert:

Code:
int eingabe;
cout << "Bitte Ganzzahl eingeben: ";
cin >> eingabe;
if (!cin.bad() && !cin.eof())
{  
       cin.clear();
       cerr << "Falsche Eingabe";
}

Trotzdem wird das Programm wieder beendet.
Oder hab ich deinen Vorschalg falsch gesetzt?
 
C++:
int input(0);
std::cout << "Bitte Ganzzahl eingeben: ";

if (!(std::cin >> input))
{  
    std::cin.clear();
    std::cerr << "Falsche Eingabe!" << std::endl;
}
std::endl vergessen ;)
 
Oder hab ich deinen Vorschalg falsch gesetzt?
Ja. Mein Code solltest du innerhalb der if Abfrage schreiben:
C++:
if((cin >> eingabe) == false)
{
  if (!cin.bad() && !cin.eof())
  {  
    std::cin.clear();
    std::cerr << "Falsche Eingabe!" << std::endl;
  }
}
Gruß

PS: Wenn das Programm trotzdem beendet wird, obwohl du den Stream an dieser Stelle zurücksetzt, dann zeig deinen restlichen Code.
 
Zuletzt bearbeitet:
Ich habs 1:1 wie du gemacht, dennoch wird das Programm (also die Konsolenanwendung) bei falscher Eingabe, wie z.B h3g42 sofort beendet.

Ich glaub das liegt ja eher an einer Einstellung innerhalb der IDE also Visual Studio oder lieg ich da falsch?
 
Zurück