004
16.02.2011, 18:49 Uhr
Hans
Library Walker (Operator)
|
Hi,
eine Möglichkeit, die Eingabe zu testen wäre so:
C++: |
cout <<"Bitte geben sie eine Zahl ein: "; cin >> ezahl; if (! cin) // falls die Zahl keine Zahl ist ... { cout << "Ungültige Eingabe bitte eine Zahl eingeben.\n"; ...
|
Ansonsten geht es meisstens über den Umweg, eine Zahl erst mal als String anzunehmen, und diesen String zeichenweise darauf zu überprüfen, ob die einzelnen Teile auch Ziffern sind. Wenn ja, wird dieser String anschliessend mit einer spezeillen Funktion in eine Zahl umgewandelt, ansonsten ein Fehlermeldung ausgegeben.
Du hast da aber noch eine andere Konstruktion in dem Programm, die man an dieser Stelle nicht braucht, und das ist diese:
C++: |
if (restart == "ja")// bei eingabe von ja { main();
|
Das ist eine sogenannte Rekursion, d.h. das Programm ruft sich selbst noch mal auf. Das bewirkt in diesem Fall, dass das Programm noch mal vollständig neu gestartet wird. D.h. es belegt erneut Speicher für Variablen, evtl. auch Programmcode. Wenn du das öfter machst, hast Du irgendwann eine Menge Speicher nur von diesem Programm belegt, obwohl es gar nicht so viel davon braucht. Die Lösung des Problems sind in diesem Fall Schleifen. Du packst die ganzen Abfragen nach den Zahlen und die Berechnungen in den Rumpf einer Schleife und wenn sich am Ende die Frage stellt, ob noch mal gerechnet werden soll, dann lässt du entweder die Schleife noch mal durch laufen, oder brichst sie ab. Danach beendest du das Programm.
Hans -- Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung. |