2016-03-31 1 views
1

Ich fing an, C für den ersten Tag zu lernen und wollte ein Programm erstellen, das den Benutzer fragt, wie viel Wechselgeld geschuldet ist, und dann die Mindestanzahl von Münzen angeben, mit denen eine Änderung vorgenommen werden kann. Angenommen, die einzigen Münzen sind Viertel (0,25), Groschen (0,10), Nickel (0,05) und Pennies (0,01). Wenn also die geschuldete Änderung 1,15 wäre, dann sollte dieses Programm 4 Quartale, 1 Groschen und 1 Nickel bedeuten. Sowieso.Float-Wert kann nicht vom Float in For-Schleife abgezogen werden?

Problem ist, dass ich versuchte 0.25 von Float-Wechsel zu subtrahieren, wenn der Änderungswert 0,25 oder mehr ist.

Und das ist die Ausgabe, die ich bekam, wird dieses Programm so weiter und weiter machen.

Das ist so komisch, weil change-- funktioniert aber ändern - 0,25 nicht. Habe ich etwas falsch gemacht? Gibt es Alternativen, die funktionieren?

+1

Gleitkomma-Arithmetik auf Computer immer zu Rundungsfehlern führt, also, während es in Ordnung ist für Anfänger Übungen zu verwenden, denken Sie daran, dass für reale Anwendungen sollten Sie nie Punkttypen für Geld verwenden schweben. –

+0

Das Veröffentlichen von Text als _text_ statt als _picture_ von Text ist eine höfliche und nützlichere Möglichkeit, Daten darzustellen. – chux

+0

@JoachimPileborg Sie haben Recht. Es wird nicht 0,01 als Pennie erkennen. Aber mit größeren Zahlen tut es das auch. Seltsam. :) – Joel

Antwort

3

Wechsel:

for (change; change >= 0.25; change - 0.25, quarters++) 

an: (? Und warum Viertel ein Schwimmer ist, können Sie haben 1,7 Viertel)

for (change; change >= 0.25; change = change - 0.25, quarters++) 
1

Sie müssen Viertel initialisieren. Und vielleicht ist dies besser lesbar:

int quarters = 0; 
while (change >= .25) { 
    quarters++; 
    change -= .25; 
} 
Verwandte Themen