Jump to content

  • Log In with Google      Sign In   
  • Create Account

FREE SOFTWARE GIVEAWAY

We have 4 x Pro Licences (valued at $59 each) for 2d modular animation software Spriter to give away in this Thursday's GDNet Direct email newsletter.


Read more in this forum topic or make sure you're signed up (from the right-hand sidebar on the homepage) and read Thursday's newsletter to get in the running!


NEED HELP with my Function !!!


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
1 reply to this topic

#1 djacq   Members   -  Reputation: 122

Like
Likes
Like

Posted 08 August 2001 - 06:52 AM

I need desperate help with solving a function problem that is stressing me out. How do you return an increment value from a function back into the main. Here''s a sample: #include #include void process_deposits (double, double, int, double); void process_deposits (double new_bal, double amount, int n_dep, double total_dep) { cout << "Enter the deposit amount : $ "; cin >> amount; new_bal += amount; ++n_dep; total_dep += amount; cout << "New balance : $ " << new_bal << " "; } int main (void) { while (tranx_type != ''Q'' && tranx_type != ''q'') { if (tranx_type == ''D'' || tranx_type == ''d'') { process_deposits (new_bal, amount, n_dep, total_dep); } else if (tranx_type == ''Q'' || tranx_type == ''q'') { cout << n_dep << " Deposits Totaling $ " << setw(8) << total_dep << "\n"; } }

Sponsor:

#2 Sandman   Moderators   -  Reputation: 2136

Like
Likes
Like

Posted 08 August 2001 - 07:11 AM

*reformats code so it is actually readable*

      

#include < iostream.h >
#include < iomanip.h >

void process_deposits (double, double, int, double);
void process_deposits (double new_bal, double amount, int n_dep, double total_dep)
{
cout << "Enter the deposit amount : $ ";
cin >> amount;
new_bal += amount;
++n_dep;
total_dep += amount;
cout << "New balance : $ " << new_bal << " ";
}
int main (void)
{
while (tranx_type != 'Q' && tranx_type != 'q')
{
if (tranx_type == 'D' || tranx_type == 'd')
{
process_deposits (new_bal, amount, n_dep, total_dep);
}
else if (tranx_type == 'Q' || tranx_type == 'q')
{
cout << n_dep << " Deposits Totaling $ " << setw(8) << total_dep << "\n";
}
}


Right.... the problem is that the variables that you pass to process_deposits are being copied. You are incrementing the copies, and then as soon as the function exits the incremented values are thrown away. There are several solutions to this problem....

1. Use a return value from process_deposits to give you the new value. Problem: you can only return one piece of data, so all the other things will still be lost.

2. Make all the things you want to change in process_deposits global. Problem: heavy use of globals is evil. (although for a simple app like this it is fine)

3. Pass the data that needs to be changed to the function using pointers. Problem: if you dont know what you are doing with pointers you will probably get lots of nasty crashes and errors and stuff.

4. Pass the data by reference. Problem: Only works in C++, but since you are using C++, that shouldnt be a problem. This is probably the best solution. Change your definition of process_deposits to this...

        
// ps... your prototype needs changing too, or just removing.

// as posted you dont need to prototype this function

void process_deposits (double& new_bal, int& n_dep, double& total_dep)
{
double amount; // dont need to pass this in, it is only used here

// code goes here

}



Edited by - Sandman on August 8, 2001 2:16:30 PM




Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS