Fehler beheben? (Konsolenanwendung)
-
Hallo.
Ich habe da eine Frage. Wenn ich in meinem Programm eine Variable namens "short Auswahl" erzeuge und ich lasse dem Programmbenutzer den Wert dieser Variable bestimmen und der Benutzer schreibt kompletten Unsinn dann kommt es zu einem Programmabsturz. Das heißt, man muss mittels "cin.ignore()" und "cin.clear()" den Fehler "beheben". Jedoch funktionniert das nicht ganz. Wenn ich z.B. zwei, drei mal einen "A" in die Variable schreibe dann wird der Fehler korrigiert. Aber wenn ich jetzt wirres Zeug einlesen lasse (z.B. adwdfgw 2134 gvfdt 4232) dann stürzt das Programm komplett ab. Wie kann ich den Fehler so beheben, dass wirklich gar nichts mehr passieren kann?
Hier ist mein Code der Fehlerbehebung:
#include <iostream> #include <windows.h> #include <conio.h> // Headerdateien #include "Fehler.hpp" #include "Time.hpp" using namespace std; // Sicherung // void Sicherung () { if (!cin.good ()) { cin.clear (); cin.ignore (); } } // Sicherung // Fehler // void Fehler () { // Wenn nötig dann Fehler korrigieren // if (cin.fail ()) { // Extreme Sicherung springt ein // Sicherung (); // Fehlermeldung // SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE), 12); cout << "> FEHLEINGABE <\n\n"; SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE), 15); // Info // cout << "Falls ein Fehler auftritt,\n"; cout << "durecken Sie einmal oder mehr-\n"; cout << "mals auf eine beliebige Taste..."; // Weiter // _getch (); system ("cls"); } // Wenn nötig dann Fehler korrigieren // Ansonsten eine normale Fehlermeldung anzeigen // else { // Fehlermeldung anzeigen // SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE), 12); cout << "> FEHELRMELDUNG <"; SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE), 15); // Weiter in 3 Sekunden // for (int t=3; t>0; t--) Time (1); system ("cls"); } // Ansonsten eine normale Fehlermeldung anzeigen } // Fehler
Danke im Voraus für eine Antwort.
MfG Minispiri
-
Probier mal das:
void Sicherung () { if (!cin.good ()) { cin.clear (); cin.sync (); // <--- //cin.ignore (); } } // Sicherung
Und:
for (int t=3; t>0; t--) Time (1);
Wie wäre es mit
Time (3);
???Sollte das nicht helfen, dann poste mal ein kompilierbares Minimalbeispiel. Bin zu faul selber eine main () zum Testen zu schreiben. :p
-
.............. schrieb:
Probier mal das:
void Sicherung () { if (!cin.good ()) { cin.clear (); cin.sync (); // <--- //cin.ignore (); } } // Sicherung
Danke, das hilft mir um so einiges besser weiter.
.............. schrieb:
Und:
for (int t=3; t>0; t--) Time (1);
Wie wäre es mit
Time (3);
???Sollte das nicht helfen, dann poste mal ein kompilierbares Minimalbeispiel. Bin zu faul selber eine main () zum Testen zu schreiben. :p
Kleiner Fehler von mir. Danke.