Как я могу заставить свою программу C возвращать сдачу в долларах, четвертаках, десятицентовиках, никелях и пенни?

Код:

int main()
{
    displayOwe(getOwe(), customerpaid());
    displayChange(dollars, quarters, dimes, nickels, pennies);
    return 0;
}

float getOwe()
{
    float owed;
    printf("\nHow much does the customer owe? ");
    scanf("%f" ,&owed );    
    return owed;
}

float customerpaid()
{
    float paid;
    printf("\nHow much did the customer pay? ");            
    scanf("%f" ,&paid );
    return paid;
}

float calculateTotal (float paid, float owed)
{
    float answer;
    answer = paid - owed;
    return answer;
}

float displayOwe(float owed , float paid)
{   
    printf("\nCustomer owes $%0.2f and paid $%0.2f.", owed, paid);
}

int displayChange(int dollars, int quarters, int dimes, int nickels, int pennies)
{
    dollars= ;
    quarters=
    dimes=
    nickels=
    pennies=
    printf("\n\nCashier should refund %d dollars, %d quarters, %d dimes, %d nickels, and %d pennies.", dollars, quarters, dimes, nickels, pennies); 
}

Мне нужно создать программу на C для расчета сдачи, которая показывает, сколько клиент должен и сколько клиент заплатил. Я сделал эту часть, и она работает безупречно, но я не знаю, как заставить программу показывать, сколько долларов, четвертаков, десятицентовиков, пятаков и пенни кассир должен вернуть покупателю. Любая помощь будет оценена по достоинству.


person Kobeissi2    schedule 27.01.2015    source источник
comment
Добро пожаловать в Stack Overflow! Пройдите тур и прочитайте Как Спросите, чтобы узнать, чего мы ожидаем от вопросов. Пожалуйста, не торопитесь, чтобы отформатировать код, чтобы сделать его удобочитаемым.   -  person Sourav Ghosh    schedule 27.01.2015
comment
Привет, Что с этим не так? Я разместил это как код.   -  person Kobeissi2    schedule 27.01.2015
comment
Эм, немного форматирования, пожалуйста. Мы не компиляторы, верно?   -  person Sourav Ghosh    schedule 27.01.2015
comment
Это лучше? я удалил некоторые из них   -  person Kobeissi2    schedule 27.01.2015
comment
Вам просто нужно разбить его по шагам, от наибольшего номинала к наименьшему. Ответ здесь может помочь: stackoverflow.com/questions/22032680/   -  person Retired Ninja    schedule 27.01.2015


Ответы (1)


displayChange нуждается в двух дополнительных аргументах: плавающая задолженность, плавающая задолженность. Остальные параметры должны быть обозначены знаком «&», поскольку они являются выходными параметрами.

Внутри displayChange я бы преобразовал float в ints:

int iOwed = owed * 100;  
int iPaid = paid * 100;

Теперь пенни равен 1, а не 0,01, а доллар равен 100, а не 1;

Как только вы получите их как целые, начните с получения изменения:

int change = iPaid - iOwed;

Затем узнайте, сколько каждого из них причитается, переходя от наибольшей к наименьшей денежной единице — сначала разделив, а затем получив остаток.

dollars =  change / 100;

Используйте оператор модуля, чтобы получить остаток:

remainder  = change % 100;

Затем продолжайте вычислять оставшиеся значения, используя 25, 10, 5 и 1 для четвертаков, десятицентовиков, пятицентовых монет и пенни.

quarters = remainder / 25;

remainder = remainder % 25;
person Scooter    schedule 27.01.2015
comment
Я получаю слишком большие числа. - person Kobeissi2; 31.01.2015