Den ska räkna ut maxantal av olika mynt, men gör det inte.
Hej. Jag har fastnat på denna uppgift, och kommer inte vidare. Det problem som uppstår är att när jag har skrivit in ett värde på Owed money, är det inte alltid max antal av varje mynt som räknas in.
Här har jag exkluderat hälften då jag tror att det är samma problem på alla 4 "myntdelar". Så nu när jag ska skriva in money, skriver jag in 4.2, vilket borde bli 16 quarters och 2 dimers, men programmet vill bara "dela ut" 1 dimer, så jag blir lämnad med 0.1 money kvar. Kan nån förklara varför det blir fel, för jag kan verkligen inte förstå vart det är fel. Om du behöver hela koden skickar jag den gärna. Tack på förhand!
#include <stdio.h>
#include <cs50.h>
float quarters = 0;
float dimers = 0;
float nickels = 0.;
float pennies = 0.;
float money;
int howManyQuarters;
int howManyDimers;
int howManyNickels;
int howManyPennies;
//To devide it easier
string dash = ("----");
int main(void)
{
// Ask the user how much money the program will calculate
do
{
money = get_float("Owed money(x.xx): ");
}
while(money < 0 || money > 1000);
printf("%s\n", dash);
// How many quarters the user is "owed", and how much money is owed after payed quarters
while(quarters < money)
{
quarters += 0.25;
howManyQuarters += 1;
}
if(quarters > money)
{
quarters -= 0.25;
howManyQuarters -= 1;
}
money -=quarters;
printf("Owed quarters: %i (%f)\n", howManyQuarters, quarters);
printf("Owed money: %f\n", money);
printf("%s\n", dash);
// How many dimers the user is "owed", and how much money is owed after payed dimers
while(dimers < money)
{
dimers += 0.1;
howManyDimers += 1;
}
if(dimers > money)
{
dimers -= 0.1;
howManyDimers -= 1;
}
money -= dimers;
printf("Owed dimers: %i (%f)\n", howManyDimers, dimers);
printf("Owed money: %f\n", money);
printf("%s\n", dash);
}
Kan du visa vad du får om du sätter en
printf("Owed dimers: %i (%f)\n", howManyDimers, dimers);
före
if(dimers>money)?
Det kan vara därför att float beter sig ganska konstigt i hardware (se t ex här). Kan du använda int istället?
Grejjen e den att jag måste använda en float för att få till decimaltalen (det ska ju kunna vara 2 decimaltal), och med int kan jag väll inte få det. När jag la till det du skrev blev det såhär:
så problemet är väll då det du sa, att float inte är exakt. Vet dock inte hur jag ska lösa det så att det ska kunna vara 2 exakta decimaltal.
Ska också kika lite på länken du skickade!
Jag föreslår att du använder heltal och räknar cent.
Problemet med flyttal är att 0,1 inte går att representera exakt, så om man lägger ihop tio sådana får man inte 1. Utskrift med %f avrundar så då ser det rätt ut.
(Förresten heter det one dime, several dimes.)
Okey så att jag använder 1, 5 10 och 25 istället?
För känns som att det borde gå att göra det på något sätt med decimaler, men det kanske är lite krångligare.
Haha tack för noteringen, ska ändra det!