C-Programmieren Rundungsfehler

Gast #4744680
Lesenswert?

Hallo,

ich fange gerade mit dem Programmieren an und versuche gerade einen 
Getränkeautomaten zu programmieren, der auch Wechselgeld geben kann. Nun 
tritt das folgende Problem auf:

Wenn ich erst 1.30 einwerfe und danach 0.20 dann gibt mir der Editor 
aus: "Bitte werfen Sie noch 0.00 EUR ein." Hat jemand einen Tipp wie ich 
dieses Problem lösen kann?

int cola () {
float cola;
float einwurf;

cola=1.5;
  if (einwurf<cola) {
  do {
  printf("\nBitte werfen Sie %0.2f Euro ein\n\n", cola);
  scanf("%f", &einwurf);
  cola = cola + einwurf;}
  while (cola>0);}
  if (cola<0) printf("\nBitte entnehmen Sie die Cola und das   Rueckgeld 
von %0.2f EUR\n\n", -cola);
  if (cola==0) printf("\nBitte entnehmen Sie die Cola.\n\n");

  return 0;
}

Danke schonmal für eure Hilfe!
Gast #4744699
Lesenswert?

Erstmal vielen Danke für eure schnellen Antworten!

Sorry wegen des Fehlers in der Zeile:
> cola = cola + einwurf;

Da hatte ich etwas rumgespielt und vergessen das + durch ein - zu 
ersetzen.

Ich werde nun versuchen das Problem durch Integer zu lösen.
Gast #4744716
Lesenswert?

Das Problem wurde von einem Kollege gerade wie folgt umgangen XD:

int cola () {
float cola;
float einwurf;

cola=1.5;
if (einwurf<cola) {
do {
printf("\nBitte werfen Sie %0.2f Euro ein\n\n", cola);
scanf("%f", &einwurf);
cola = cola - einwurf;}
while (cola>0.005);}
if (cola<-0.005) printf("\nBitte entnehmen Sie die Cola und das 
Rueckgeld von %0.2f EUR\n\n", -cola);
if (cola>=-0.005) printf("\nBitte entnehmen Sie die Cola.\n\n");

return 0;
}

Grüße
Gast #4744728
Lesenswert?

m.n. schrieb:
> Du kannst schon bei float bleiben,
>
> ...
>   cola = cola - einwurf;
> } while (cola >= 0.005);
>
> darfst aber nicht auf exakt 0.0 vergleichen.
> Alex schrieb:
>> if (cola==0) printf("\nBitte entnehmen Sie die Cola.\n\n");
>
> Entweder >= oder <= verwenden.

Naja, nicht wirklich.
Wenn herauskommt, dass noch 0.000004 einzuwerfen sind, reicht es eben 
immer noch nicht.

awsxdde

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren