Das Problem ist, dass cin immer nur ein Zeichen abfragt und in deine Variable Geschwindigkeit speichert. Dabei landen auch Buchstaben dort, allerdings mit dem entsprechenden Wert aus der ASCII-Tabelle (z.B. für 'a' bekommst du 97 bzw. 0x60). Daher musst du mit dieser Variante auch jedes einzelne Zeichen der Zahl in einer Schleife abfragen. Hier mal eine Erkärung dazu:
http://www.cpp-tutor.de/cpp/le04/cin.html
Dein else-Zweig kann auch niemals aufgerufen werden, da die vorherigen Bedingungen alle möglichen Fälle abdecken; also kleiner, gleich und größer. Daher wird niemand die Idiot-Meldung sehen können
Da ich die cin-Funktionen nicht mag greife ich eher lieber immer zu den scanf-Funktionen. Hier gibt es mehr Infos darüber:
http://www.cplusplus.com/reference/cstdio/scanf/
Damit kannst du direkt die Eingabe formatieren und bekommst die komplette Zahl mit einer Abfrage. Bin mir gerade nur nicht sicher, wie die Funktion bei einer falschen Eingabe reagiert. Ich habe mal deinen Beispielcode entsprechend angepasst, ist aber nicht getestet.
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
int main ()
{
const int tempolimit = 100;
int Geschwindigkeit;
printf("Hier sind %d km/h erlaubt\n", tempolimit);
printf("Wie schnell sind Sie gefahren?\n");
scanf ("%d",&Geschwindigkeit);
if (Geschwindigkeit == tempolimit)
printf("Nochmal Glueck gehabt, Junge..\n");
else if (Geschwindigkeit < tempolimit)
printf("Du bist %d km/h unter dem Tempolimit gefahren. Beruhig dich Junge..\n", tempolimit - Geschwindigkeit);
else if (Geschwindigkeit > tempolimit)
printf("Du bist %d km/h zu schnell gefahren. Das gibt maechtig Probleme, Junge..\n", Geschwindigkeit - tempolimit);
return 0;
}
|