000
12.03.2006, 02:55 Uhr
~Tobias_H
Gast
|
Ich lasse derzeit in einer Funktion Mitgliederdaten wie name,vorname und geburtsdatum eingeben. Das Geburtsdatum wird einer prüfung unterzogen, ob das überhaupt gültig ist und nicht zufällig ein falsches Datum beinhaltet. Sollte die ersten Eingabe des Datums falsch sein soll man in einem loop die Möglichkeit haben solange neu einzugeben bis das Datum korrekt ist.
Diesen Loop soll man verlassen können, wenn man einfach etwas eingibt, das keine Zahl ist(überprüfe ich micht isdigit(int) ). Nur leider klappt das nicht so richtig. Wird im Loop ein Buchstabe eingegeben, verlasse ich die schleife zwar, aber auch das ganze Programm. Aus irgendeinem Grund klappt mir das Programm zusammen.
Werden alle Daten richtig eingegeben, ohne die Abbruchbedingung zu erfüllen, klappt alles wunderbar.
Warum wird mein Programm beendet, wenn ich in diesen Teil des Programmes komme?
C++: |
//Prüfen ob Datum ok if(!checkDatum(tg, mn, jr)) { while(!checkDatum(tg,mn,jr)) { std::cout<<"\n\nDatum fehlerhaft, bitte gültiges Datum eingeben\n"; std::cout<<"Geben Sie das Geburtsdatum der Person im Format TT.MM.JJ an"<<std::endl; std::cin>>tg>>pkt>>mn>>pkt>>jr; if(!isdigit(tg)) { std::cout<<"Abbruch durch Benutzer"<<std::endl; break; } } }
|
Hier mal der Code der kompletten Funktion, die Funktion wird über ein switch Anweisung aufgerufen:
C++: |
void createMember() { std::cout<<"Geben Sie bitten den Vornamen des anzulegenden Mitglieds an"<<std::endl; std::getline(std::cin, vorname); std::cout<<"Geben Sie bitten den Nachnamen des anzulegenden Mitglieds an"<<std::endl; std::getline(std::cin, nachname);
std::cout<<"Geben Sie das Geburtsdatum der Person im Format TT.MM.JJ an"<<std::endl; //Einlesen des Datums von der Tastatur char pkt; std::cin>>tg>>pkt>>mn>>pkt>>jr;
//Prüfen ob Datum ok if(!checkDatum(tg, mn, jr)) { while(!checkDatum(tg,mn,jr)) { std::cout<<"\n\nDatum fehlerhaft, bitte gültiges Datum eingeben\n"; std::cout<<"Geben Sie das Geburtsdatum der Person im Format TT.MM.JJ an"<<std::endl; std::cin>>tg>>pkt>>mn>>pkt>>jr; if(!isdigit(tg)) { std::cout<<"Abbruch durch Benutzer"<<std::endl; break; } } } if(checkDatum(tg,mn,jr)) { Member *pMitglied = new Member(vorname, nachname, tg, mn, jr); member.push_back(pMitglied); //Status des Vektors auf gefüllt setzen, sofern er noch auf false ist if(!vectorStatus) vectorStatus=true; std::cout<<"Vector erzeugt"<<std::endl; _getch(); } }
|
|