![]() |
|
#1
|
|||
|
|||
Revised--C/Pointers problemWell,I read my book again and I understand the use of functions and pointers.But I am still experiencing a problem,is one of my function cannot return accurate result.I gues my function is correct,but don't know why it cannot return accurate result,can anyone try to look and tell me where I made a mistake?
Question again(for reference) Write a program to dispense change.The user enters the amount paid and the amount due.The program determines how many dollars, 50cents,20cents,10cents should be given as change. a)Write a function with the heading: void dispense(int change,int *dollars,int *c10,int *c20,int *c50) that determines and return the quantity of each kind of coin. (Note:16 cents-5 cents=11 cents meaning that one 10cents is returned for charge.However 16 cents-1 cents=15 cents meaning that one 20-cents is required(round-up)) -------------------------------------------------------------------------- b)Write a function int getData(int *paid,int *due) that doe the following: inform the user that amount paid and amount due should be entered in cents(integer) do prompt the user to enter the amount paid and amount due read in the data while (amount due<0 or amount paid<amount due); if both amount paid and amount due are zeros return 0 otherwise return 1 --------------------------------------------------------------------------c)Your main program should repeat the following until both the amount paid and amount due are zeros. 1.call the function getData to ask for the amount paid and amount due 2.print out the charge and the # of each kind of coins to dispense. Program output: The amount-paid and amount-due should be entered in cents (integer) To terminate the program,enter 0 for both values Enter the amount paid and amount due please:16 5 amount due:5,amount paid:16,and thus change=11 You are suggested to give him/her 1 10-cents coin(s) The amount-paid and amount-due should be entered in cents (integer) To terminate the program,enter 0 for both values Enter the amount paid and amount due please:26 5 amount due:5,amount paid:26,and thus change=21 You are suggested to give him/her 1 20-cents coin(s) The amount-paid and amount-due should be entered in cents (integer) To terminate the program,enter 0 for both values Enter the amount paid and amount due please:66 5 amount due:5,amount paid:66,and thus change=61 You are suggested to give him/her 1 50-cents coin(s) 1 10-cents coin(s) The amount-paid and amount-due should be entered in cents (integer) To terminate the program,enter 0 for both values Enter the amount paid and amount due please:81 5 amount due:5,amount paid:81,and thus change=76 You are suggested to give him/her 1 50-cents coin(s) 1 20-cents coin(s) 1 10-cents coin(s) The amount-paid and amount-due should be entered in cents (integer) To terminate the program,enter 0 for both values Enter the amount paid and amount due please:5 81 Enter the amount paid and amount due please:0 0 -------------------------------------------------------------------------- CPP / C++ / C Code:
|
|||
|
#2
|
|||
|
|||
|
Quote:
Not likely, since you didn't tell us what function you are having problems with, what input you gave it, what output you expected and what you got. Here's some general directions for debugging: When you get input from the user, print out the values that the program is actually using, so that you can see it's working on what you think it is. When your program enters a function, print out all of the values of the arguments, so that you can see that the function is working on the things that you think it is. Before calculations, print out values of variables that are used in the calculation. After calculations print out the value of the result. For example in main() CPP / C++ / C Code:
In function dispense: CPP / C++ / C Code:
and CPP / C++ / C Code:
etc. Regards, Dave |
|
#3
|
|||
|
|||
|
Well,what I can tell you is the problem probably occurs in the pointers in main() function,but it may happen if I declar the function dispense wrongly.
and one more thing,the program should terminate when I enter 0,0,the function will repeat when Ienter a<b(assume a is the first number,b is the second number) and thus enter (a>b) will do the calculations.When run the program,in no doublt,when I enter (a>b) and (a<b) it is functable,but when Ienter 0,0,it will loop itself once and if I enter 0,0,it will then terminate.Can anyone tell me if it is error from my looping or I haven't set the initial value? |
|
#4
|
|||
|
|||
|
Quote:
Did you put the print statements in dispense() that I showed? Are you initializing all variables used in the "+=" cases? Quote:
Put the following in place to see that the program is reading what you think it is. Then check the logic of your loop condition. CPP / C++ / C Code:
Then, if you think the logic in dispense() is OK, look at the place(s) where you call dispense(). Check the return value to see if it's really returning the value you meant for it to. Regards, Dave |
|
#5
|
|||
|
|||
|
I did tried,but the answer is still the same after initialization,the answer is still -855993460
|
|
#6
|
|||
|
|||
|
Quote:
Show me your most recent code. Regards, Dave |
|
#7
|
|||
|
|||
|
CPP / C++ / C Code:
|
|
#8
|
|||
|
|||
|
Quote:
You are changing the local copies of c10, c20 and c50 to point to things that you will calculate. Storing values in initial1, initial2, and initial3 will not change anything in the variables c10, c20 and c30 in the main(). Try this instead: CPP / C++ / C Code:
Then, take it from there to debug the logic. Regards, Dave |
|
#9
|
|||
|
|||
|
I have to say thanks for your help.
But one thing,if I put the statment by your on my function dispense,all output will be zero.Does it related to the function been called? |
|
#10
|
|||
|
|||
|
Quote:
I'm not sure what you mean. Since you are initializing them (*c50, *c20, etc.) inside the function, they will be set to 0 each time the function is called. Now, if you are getting zeros after the function has done its stuff, you put printf statements as each calculation is performed: CPP / C++ / C Code:
Then follow the logic through the switch() statement. Is it doing what you need for it to do? Regards, Dave |
Recent GIDBlog
Toyota - 2009 May Promotion by Nihal
| Thread Tools | Search this Thread |
| Rate This Thread | |
|
|
Similar Threads
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| CD burner will not burn, new problem | sdshaman | Computer Hardware Forum | 4 | 07-Feb-2008 00:17 |
| Mother board problem | mrkamran | Computer Hardware Forum | 2 | 07-Oct-2004 11:31 |
| Mpeg2 SVCD disc problem | mrnobody | Computer Software Forum - Windows | 0 | 13-Aug-2004 09:51 |
| C I/O problem | kelly80 | C Programming Language | 4 | 27-Apr-2004 21:15 |
| Another FX 5600 problem (but with details that might shed light on this) | BobDaDuck | Computer Hardware Forum | 2 | 16-Apr-2004 08:53 |
Network Sites: GIDNetwork · GIDWebHosts · GIDSearch · Learning Journal by J de Silva, The