021
26.05.2003, 04:19 Uhr
Hans
Library Walker (Operator)
|
Hallo Sara(h),
Zitat: |
Ich habe bei meinem Programm jetzt noch ein winziges Problem. Vielleicht weißt du ja, woran es liegt. Immer wenn ich einen Buchstaben statt einer Zahl eingebe, gibt er mir aus, dass dies keine Ziffer ist und danach kommt immernoch, dass die Zahl '0' unter dem gesuchten Bereich liegt. Gebe ich aber z.B. 33e4 ein, so kommt dies nicht.
|
Das hat mit dem Aufbau der Funktion zahlein() zu tun. Die Definition
Code: |
[b]int[/b] zahlein(void)
|
bedeutet nämlich, das diese Funktion einen int-wert zurück gibt, und zwar immer, und egal was man eigegeben hat. Auch wenn Du nur die RETURN-Taste drückst. Das sie dann den Wert Null zurück gibt, liegt wie Du richtig heraus gefunden hast, daran, das w am Anfang auf Null gesetzt wird. Das ist wiederum nötig, damit die Rechnung
korrekt ausgeführt wird. Wenn Du in der Funktion w auf 1 belässt wird sie Dir immer falsche Werte liefern. Und zwar solche, die immer um eine Zehnerpotenz grösser sind als das, was Du eingegeben hast. Das kannst Du ganz leicht überprüfen, indem Du anstelle Deines Programms sowas in dieser Art in main() rein schreibst:
C++: |
int x;
printf("Bitte geben Sie eine Zahl ein: "); x=zahlein(); printf ("\nSie haben die Zahl %d eingegeben.\n", x);
|
Jetzt Fragst Du Dich wahrscheinlich, warum das nun wieder so ist, oder? Nun, darauf gehe ich jetzt nicht ein, weil das etwas lang ausfallen wird, wie ich mich kenne...  Deshalb jetzt zurück zu Deiner Frage:
Zitat: |
Wie kann ich es also machen, dass er mir bei Eingabe eines Buchstaben nur die Meldung, dass es keine Ziffer ist, ausgibt und nicht noch, das 0 unter dem gesuchten Bereich liegt?
|
Das Problem kannst Du am Besten lösen, indem Du nach dem Aufruf von zahlein() eine Abfrage auf Null einbaust, also:
C++: |
... printf("\n\nBitte geben Sie erneut eine Zahl ein: "); x=zahlein(); /* Vom Benutzer eine Zahl eingeben lassen */ if (x==0) printf("Sie müssen eine Zahl eingeben!\n");
|
Wenn Du die Abfrage aber so in Dein Hauptprogramm einbaust, wirst Du trotzdem noch weiter die Meldung bekommen, das die Zahl Null unter dem gesuchten Bereich liegt. Das ist aber wahrscheinlich nicht das, was Du willst. Also müssen wir das ganze etwas Trickreicher (aber auch umfangreicher) anstellen, z.B. so:
C++: |
do { printf("\n\nBitte geben Sie erneut eine Zahl ein: "); x=zahlein(); if (x==0) printf("Sie müssen eine Zahl grösser oder gleich 1 eingeben!\n"); } while (x==0);
|
Das ist zwar wahrscheinlich auch nicht so ganz dass, was du Dir vorstellst, aber was besseres fällt mir gerade nicht ein.
Man könnte zwar die Funktion zahlein() noch etwas erweitern, aber das ist auch nicht unbedingt im Sinne des Erfinders. Ich hatte die Funktion nämlich ursprünglich nur zur Eingabe von Zahlen gedacht. Die Bereichsüberprüfung war als Aufgabe für den Aufrufer vorgesehen, in diesem Fall also das Hauptprogramm.
So, ich hoffe, das hilft jetzt erst mal weiter,
Hans
P.S. Wie schreibst Du Dich denn jetzt richtig, mit oder ohne 'h' am Ende? --- Edit: cpp-Tags so gesetzt, das der Text auch richtig formatiert wird... -- Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung. Dieser Post wurde am 13.01.2013 um 05:41 Uhr von Hans editiert. |