while-Schleife akzeptiert unter 1 nur den Wert 0.5
Verfasst: Di Feb 03, 2015 3:26 pm
Hallo, Leute.
Habe vor kurzer Zeit angefangen, mich in C einzulernen, da für mich Programmieren schon immer reizvoll war. Nun habe ich mich hier angemeldet, um Teil einer Community zu werden und euch mit meinen Fragen zu belästigen
.
Das habe ich gleich ein Problem, bei dem ihr mir vielleicht behilflich sein könnt. Doch zuerst der Code (es handelt sich um ein Übungsprogramm, um Schleifen und if-Anweisungen zu testen):
Bei dem fettgedruckten Teil handelt es sich um eine While-Schleife, die wahr ist, wenn man Münzen, die in Wirklichkeit nicht existieren, angibt. Das Problem ist: gibt man 0.2 oder 0.1 ein, aktiviert dies trotzdem die Schleife. Auch bei anderen Werten unter 1 (außer 0.5) ergibt sich dieser Fehler. Bei 0.5 und alles ab dem Wert 1 (sofern mit angegeben) ist die Schleife korrekterweise falsch. Ich habe auch probiert, die While-Schleife anders zu formulieren - z.b. while ( ! ( geld == 1|| geld == .5 usw.)) - aber das Ergebnis ist das gleiche.
Falls jemand Lust hat, seine Zeit für eine Antwort aufzubringen, würde ich mich sehr darüber freuen.
Vielen Dank im Voraus.
Viele Grüße
Rico
Habe vor kurzer Zeit angefangen, mich in C einzulernen, da für mich Programmieren schon immer reizvoll war. Nun habe ich mich hier angemeldet, um Teil einer Community zu werden und euch mit meinen Fragen zu belästigen

Das habe ich gleich ein Problem, bei dem ihr mir vielleicht behilflich sein könnt. Doch zuerst der Code (es handelt sich um ein Übungsprogramm, um Schleifen und if-Anweisungen zu testen):
Code: Alles auswählen
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
//Getränkeautomat
int drink;
int menge;
float preis;
float geld;
float zuZahlen;
float change;
char weiter;
do
{
system ("Cls");
printf ("Get-A-Drink 2000\n\n\n");
printf ("\n1 - Cola - 1.50 Euro\n");
printf ("2 - Fanta - 1.30 Euro\n");
printf ("3 - Sprite - 1.20 Euro\n\n");
do
{
printf ("Geben Sie die Nummer Ihres Wunschgetraenks ein: ");
scanf ("%d", &drink);
fflush(stdin);
if (drink != 1 && drink != 2 && drink != 3)
{
printf ("\n\nIhre Eingabe war leider falsch. Bitte versuchen Sie es erneut.\n\n");
}
}
while (drink != 1 && drink != 2 && drink != 3);
switch (drink)
{
case 1:
{
preis = 1.50;
printf ("\n\nSie haben sich fuer erfrischende Cola entschieden.\n");
break;
}
case 2:
{
preis = 1.30;
printf ("\n\nSie haben sich fuer fruchtige Fanta entschieden.\n");
break;
}
case 3:
{
preis = 1.20;
printf ("\n\nSie haben sich fuer spritzige Sprite entschieden.\n");
break;
}
}
do
{
printf ("\n\nWieviele Flaschen moechten Sie kaufen (max. 5)?\n");
scanf ("%d", &menge);
if (menge > 5 || menge < 1)
{
printf ("\n\nIhre Eingabe war leider falsch. Bitte versuchen Sie es erneut.\n\n");
}
}
while (menge > 5 || menge < 1);
zuZahlen=preis*menge;
do
{
printf ("\n\nEs fehlen noch %.2f Euro.\n\n", zuZahlen);
printf ("Bitte werfen Sie ein Geldstueck ein: ");
fflush(stdin);
scanf ("%f", &geld);
[b]while (geld != 2 && geld != 1 && geld != 0.50 && geld != 0.10 && geld != 0.20)
{
printf ("\n\n\nDas Geldstueck wurde leider nicht erkannt.\n");
printf ("\n*KLING* (Das Geldstueck liegt im Fach.)\n\n");
system ("PAUSE");
printf ("\n\nEs fehlen noch %.2f Euro.\n\n", zuZahlen);
printf ("Bitte werfen Sie ein Geldstueck ein: ");
fflush(stdin);
scanf ("%f", &geld);
}[/b]
zuZahlen -= geld;
}
while (zuZahlen > 0);
printf ("\n\nVielen Dank! Sie erhalten nun Ihre Auswahl!\n\n");
system ("PAUSE");
if (menge == 1)
{
printf ("\n\n*KDONK* (Das Getraenk liegt im Entnahmefach.)\n\n");
system ("PAUSE");
}
else
{
printf ("\n\n*KDONKDONK* (Die Getraenke liegen im Entnahmefach.)\n\n");
system ("PAUSE");
}
change=zuZahlen * -1;
if (change != 0)
{
printf ("\n\nSie bekommen ausserdem %.2f Euro zurueck.\n\n", change);
system ("PAUSE");
printf ("\n\n*KLING* (Das Wechselgeld liegt im Fach.)\n\n");
system ("PAUSE");
}
printf ("\n\nVielen Dank fuer Ihren Einkauf!\n\n");
system ("PAUSE");
do
{
printf ("\n\nMoechten Sie weitere Getraenke kaufen? j/n\n");
fflush(stdin);
scanf ("%c", &weiter);
}
while (weiter != 'j' && weiter != 'n');
}
while (weiter == 'j');
printf ("\n\nAuf Wiedersehen!\n\n");
return 0;
}
Falls jemand Lust hat, seine Zeit für eine Antwort aufzubringen, würde ich mich sehr darüber freuen.
Vielen Dank im Voraus.
Viele Grüße
Rico