Code review - mein Programm spinnt ein bisschen
-
zu 1.:
Ich glaube das liegt daran, dass Alter nunmal vom Typ int ist und wenn du nen Buchstaben eingibst, kanns das net verarbeiten!zu 2.:
mach einfach:
if(Person[Auswahl].Alter != 0)
{
cout << Person[Auswahl].Alter;
}ich glaube das geht...und es wird wohl keiner eine Person anlegen, die 0 Jahre alt ist

-
Finn schrieb:
zu 1.:
Ich glaube das liegt daran, dass Alter nunmal vom Typ int ist und wenn du nen Buchstaben eingibst, kanns das net verarbeiten!Klar kann das Zeichen als Integer "verarbeitet" werden. Dann wird halt der ASCII-Code dargestellt.
-
Danke euch!
Nur, wie kann ich umgehen das Jemand einen Buchstaben eingibt bei der Integer Variable? Kann man alle Buchstaben in einem Ausdruck zusammenfassen?
also wie folgt:
Wenn ... .Alter ein Buchstabe ist... geht es nicht.
Ich möchte es irgendwie umgehen alle Buchstaben aufzulisten.

-
Kay schrieb:
Nur, wie kann ich umgehen das Jemand einen Buchstaben eingibt bei der Integer Variable? Kann man alle Buchstaben in einem Ausdruck zusammenfassen?
Naja, der Integer-Datentyp ist hier wohl ungeeignet, da die ASCII-Werte von 65-90 ein Zeichen repräsentieren und gleichzeitig ein mögliches Alter seien könnten. Ich empfehle dir einen char(acter) oder std::string. Da könntest du durch das Array iterieren und überprüfen ob es ein Zeichen beinhaltet.
-
Hm du könntest statt int Alter, int Alter[2] nehmen und dann
if(Alter[1] != 1 || Alter[1] != 2 /*und so weiter..bis:*/|| Alter[2] != 0) { //Fehler }Dann müssteste halt die zahlen von 0-9 abfragen für Alter[1] und Alter[2] und umgehst damit, dass was anderes weiterverarbeitet wird!
Das is natürlich recht unschön...vllt. hat ja wer was schöneres
-
Das kann man so machen:
int Alter; while(!(cin>>Alter)){ // Auf Fehler prüfen cout<<"Das war keine Zahl!"<<endl; // Wenn ein Fehler gemacht wurde: cin.clear(); // Fehlerflags löschen cin.ignore(); // Nächstes Zeichen ingorieren }
-
So... das Problem wäre gelöst, hab es erstmal mit SeppJ´s Variante gemacht.

Jetzt aber nochmal zu den Nullen... Also das Programm gibt automatisch immer eine Null hinter Alter aus wenn ich die Stelle im array aufrufe, obwohl ich nirgendswo gesagt habe, dass da eine Null hin soll. Da soll wie gesagt gar nichts stehen, sofern kein Alter angegeben wurde.
-
Wenn du nicht willst, dass da eine 0 steht, dann zeig "Alter" einfach nicht an. Irgendeinen Wert muss ja die Integer-Variable haben. Und das ist im Debug-Modus standardmäßig 0, wenn du nichts anderes definiert hast.
-
Ok, dann guck ich mal dass der nur die ausspuckt wo was eingetragen wurde.
Jetzt hab ich aber noch grad gesehen, dass bei der Variante:
while(!(cin>>Person[Zaehler].Alter)){ cout << "Das war keine Zahl" << endl; cin.clear(); cin.ignore(); }Es wird immer so oft "Das war keine Zahl" ausgeschrieben, wie Zeichen die ich eingebe. Ich möchte aber auch bei einem langen Namen, zum Beispiel "Max Mustermann", nur eine Warnung bekommen und nicht 14, geht das?
-
Kay schrieb:
Es wird immer so oft "Das war keine Zahl" ausgeschrieben, wie Zeichen die ich eingebe. Ich möchte aber auch bei einem langen Namen, zum Beispiel "Max Mustermann", nur eine Warnung bekommen und nicht 14, geht das?
Ja natürlich, du musst einfach nur ein bisschen simple Programmlogik dazumachen, die die Meldung nur beim ersten Durchlauf der Schleife anzeigt. Dies umzusetzen überlasse ich aber dem geneigten Leser.