i have to make a simple calculator program in c++
the program need to have the all the calculation in a function called do_next_op. i tried to make this program but it turns out that my program returns incorrect results, i think it may be caused by the value of total is reset to zero after each loop, and i have no idea how to repair that.

i tried to make the program without do_next_op function and it works perfectly, but unfortunately i have to include thet function, and i cant spot the error. please help
thanks

#include <iostream>
using namespace std;

void instruction ();
float do_next_op ( float, float , char );

int main()
{
    instruction();                      // displays instruction
    
    float total;
    float newentry;
    char op;
    
    total = 0;                           // initialisation

    cin >> op;
    while  (op != 'Q' && op != 'q' && op != '=') 
    {    
    cin >> newentry;    
    do_next_op (total, newentry, op);
    cin >> op;
    }    
    cout << "the final result is " << total << endl;
    
    system ("pause");
    return 0;
}


void instruction()
{
    cout << endl;
    cout << "*******************************************************" << endl;
    cout << "                    CALCULATOR                    " << endl;
    cout << "        the initial value is set to 0             " << endl;
    cout << "   please enter an operator and a number to begin " << endl;
    cout << "    the accepted operators are : + - * / ^ only   " << endl;
    cout << "       enter a q, Q or = to exit the program      " << endl;
    cout << "*******************************************************" << endl;
    cout << endl;
}

float do_next_op ( float total, float newentry, char op)    
{
    switch (op)
    {
		case '+': total = total + newentry;
				  break;
		case '-': total = total - newentry;
				  break;
		case '*': total = total * newentry;
				  break;
		case '/': total = total / newentry;
				  if (newentry == 0)
				  {
					  cout << "divide by zero is unexecutable" << endl;
				  }		  
				  break;
		case '^': total =  pow (total,newentry);
				  break;
				  default : cout << "  Unacceptable Operator(" << op << ")" << endl;
		}
    cout << "result so far is " << total << endl;
    cout << endl;
    
    return (total);
}

Pass the parameters to float do_next_op by reference. Also you need to add <cmath> in your code

#include <iostream>
#include<cmath>
using namespace std;

void instruction ();
float do_next_op ( float&, float& , char );

int main()
{
    instruction();                      // displays instruction
    
    float total;
    float newentry;
    char op;
    
    total = 0
.0f;                           // initialisation

    cin >> op;
    while  (op != 'Q' && op != 'q' && op != '=') 
    {    
    cin >> newentry;    
    do_next_op (total, newentry, op);
    cin >> op;
    }    
    cout << "the final result is " << total << endl;
    
    system ("pause");
    return 0;
}


void instruction()
{
    cout << endl;
    cout << "*******************************************************" << endl;
    cout << "                    CALCULATOR                    " << endl;
    cout << "        the initial value is set to 0             " << endl;
    cout << "   please enter an operator and a number to begin " << endl;
    cout << "    the accepted operators are : + - * / ^ only   " << endl;
    cout << "       enter a q, Q or = to exit the program      " << endl;
    cout << "*******************************************************" << endl;
    cout << endl;
}


float do_next_op ( float &total, float &newentry,char op)    
{
    switch (op)
    {
		case '+': total = total + newentry;
				  break;
		case '-': total = total - newentry;
				  break;
		case '*': total = total * newentry;
				  break;
		case '/': total = total / newentry;
				  if (newentry == 0)
				  {
					  cout << "divide by zero is unexecutable" << endl;
				  }		  
				  break;
		case '^': total =  pow (total,newentry);
				  break;
				  default : cout << "  Unacceptable Operator(" << op << ")" << endl;
		}
    cout << "result so far is " << total << endl;
    cout << endl;
    
    return (total);
}

whoa thanks a lot. also, i need to include some error handling in this program. for example, when people entered a not a valid (non numeral) input to the 'newentry' variable, like '+a', then the program will crash. anyone know how to avoid this?

whoa thanks a lot. also, i need to include some error handling in this program. for example, when people entered a not a valid (non numeral) input to the 'newentry' variable, like '+a', then the program will crash. anyone know how to avoid this?

Sorry. no more help...either you or your friend messed it up

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.