Lukas93 schrieb:
Soweit versthee ich das was du meinst, aber was genau heißt das:
unsigned int wert; //??
if (!(cin >> wert)) //??
unsigned int: Eine Ganzzahl, die positiv sein muss. Im Prinzip kannst du natürlich auch negative Zahlen mit 5 Stellen haben, aber ich nahm mal an, dass du nur positive Zahlen zulassen möchtest.
if (!(cin >> wert)): Ok, nicht ganz so einfach, aber extrem nützlich. Ich nehme mal an, den Standardeingabestrom cin kennst du und weißt, dass cin >> wert einen Wert von der Standardeingabe einliest und in der Variable wert speichert. cin ist auch so schlau, dass es weiß, dass wert ein unsigned int ist und dass deswegen nur positive Ganzzahlen als Eingaben zulässig sind. Und nun gibt es da noch eine tolle Eigenschaft der Eingabefunktionen: Die liefern als Rückgabewert alle den Stream selbst zurück! Deshalb kann man auch cin >> wert1 >> wert2 >> wert3; schreiben. Das wird gelesen als (((cin >> wert1) >> wert2) >> wert3); . Das innerste cin >> wert1 liefert als Rückgabewert cin. Wenn dieses ausgeführt wurde, steht da also ((cin >> wert2) >> wert3); . Wenn cin >> wert2 ausgeführt wurde, steht da (cin >> wert3); und danach nur cin (macht einfach gar nix, ist aber unten noch wichtig, dass es da steht). Und daher funktioniert das so wie du kennst, dass da erst wert1, dann wert2, dann wert3 gelesen wird.
Und jetzt kommt die zweite Eigenschaft der Streams in's Spiel: Was passiert, wenn die Eingabe ungültig war, also z.B. keine Zahl eingegeben wurde, obwohl eine Zahl erwartet wird? Dann setzen die Streams ein Fehlerflag. Im Prinzip könntest du mit cin.eof(), cin.fail() und cin.bad() herausbekommen, welches Fehlerflag genau gesetzt wurde, aber für uns ist nur interessant, ob überhaupt ein Fehlerflag gesetzt wurde oder nicht. Da kommt nun noch eine praktische Eigenschaft der Streams in's Spiel: Wenn man sie auswertet, dann geben sie entweder den Wert 0 zurück, wenn ein Fehlerflag gesetzt ist oder andernfalls einen Wert der nicht 0 ist. if (cin >> wert) heißt also, dass dort erst einmal wert gelesen wird. Dann steht da nur noch if (cin) . Jetzt wird cin ausgewertet. Ist die Eingabe fehlgeschlagen, bekommt man 0 und die if-Abfrage springt nicht an. Andernfalls bekommt man etwas, was nicht 0 ist und die Bedingung ist wahr.
In meinem Code habe ich noch ein ! (d.h. NICHT) davor gemacht, weil ich es genau umgekehrt haben wollte, d.h. die Bdeingung sollte wahr sein, wenn ein Fehler auftritt.
Und du hast eine kleinigkeit übersehen.
Du überprüfst nur, ob die Zahl mehr als 5 Ziffern hat, aber nicht ob sie weniger als 5 hat.
Sie muss zwingend 5 Ziffern beinhalten.
Dann prüf das eben auch. Ich bin sicher, die Bedingung bekommst du selber hin.