# Thread: Reference parameters and calculating change

1. ## Reference parameters and calculating change

I need to query the user for the amount owed and the amount received. I then must calculate the change due and display it in the form of dollars, quarters, dimes, nickels and pennies. I need to use at least 4 reference parameters within the code as well. The code looks good to me, but for some reason the calculations just spit out garbage. Any suggestions?

Code:
```/*Program to determine amount of change due
Nov. 4, 2005
Language: C (gcc target)
*/

#include <stdio.h>
#define dollar 100
#define quarter 25
#define dime 10
#define nickel 5

/*Function prototypes*/
void fourth (int *amount2);
void tenth (int *amount3);
void twentieth (int *amount4);
void hundredth (int *amount5);

int main(void)
{ double total, payment;
int amt, amt2, dollars;

printf("Enter amount of money due:  ");
scanf("%d", &total);
printf("Enter amount of money given:  ");
scanf("%d", &payment);
amt=(payment-total)*100;
dollars=amt/dollar;
printf("%d dollars in change due ",dollars);
amt2=amt-(dollars*100);
fourth(&amt2);
return 0;
}

void fourth (int *amount2)
{ int quarters, amt3;

quarters=*amount2/quarter;
printf("\n%d quarters in change due ",quarters);
amt3=*amount2-(quarters*quarter);
tenth(&amt3);
return;
}

void tenth (int *amount3)
{ int dimes, amt4;

dimes=*amount3/dime;
printf("\n%d dimes in change due ",dimes);
amt4=*amount3-(dimes*dime);
twentieth(&amt4);
return;
}

void twentieth (int *amount4)
{ int nickels, amt5;

nickels=*amount4/nickel;
printf("\n%d nickels in change due ",nickels);
amt5=*amount4-(nickels*nickel);
hundredth(&amt5);
return;
}

void hundredth (int *amount5)
{ int pennies;

pennies=*amount5;
printf("\n%d pennies in change due ",pennies);
return;
}``` 2. with a quick glance
why return on voids?
why ?
Code:
`fourth(&amt2);`
why the &?

there are simpler ways 3. Originally Posted by white
with a quick glance
why return on voids?
why ?
Code:
`fourth(&amt2);`
why the &?

there are simpler ways

It was my understanding that while the void returns no value, I still need the return in order for the entire program to complete. Is this incorrect? As far as the simpler ways goes, I don't know them and would appreciate some enlightenment. 4. >>It was my understanding that while the void returns no value, I still need the return in order for the entire program to complete.
After the completion of the whole program only the return value of main is returned not all the return values of the functions you have defined in your program.

Code:
```double total, payment;
printf("Enter amount of money due:  ");
scanf("%d", &total);
printf("Enter amount of money given:  ");
scanf("%d", &payment);```
you are storing a int value in double thats what you did'nt intend to. 5. well the rule is that pass a value into a function and the function returns a value
no need to pass a pointers and such...

so
Code:
`fourth(&amt2);`
becomes
Code:
`fourth(amt2);`
Code:
`void fourth (int *amount2)`
becomes
Code:
`void fourth (int *amount2)`
you do the calculations.... then you pass the next number into the next function
and so on. (along with the prementioned changes) 6. Originally Posted by white
well the rule is that pass a value into a function and the function returns a value
no need to pass a pointers and such...

so
Code:
`fourth(&amt2);`
becomes
Code:
`fourth(amt2);`
Incorrect.amt2 is not a pointer but the function declaration wants a pointer so &amt2 is correct to pass. 7. the only thing you need to do to get the code in your original post to work is to use %lf instead of %d in your scanf calls, since the datatype for payment and total is double.

you do not need return statments in void functions (you should remove them, though they won't hurt anything)

@white. There is nothing wrong with using pointers over passing by value. In many situations it's preferred.
If you read the original post he "needs" to... probably a requirement of the assignment.

^this is nothing not already stated in the thread, but it was getting a little confusing Popular pages Recent additions 