Loop running forever once I try to terminate

I'm at the very end of this calculator program, everything is working perfectly. Besides the fact I cannot get this loop to end. I can't end it with
 
while(op!= q)

Because i need it to display the final result. How I have it now the loop is supposed to end with num2= quit, when I input this into the program it does something crazy and just keeps going and going and going and going until I just exit the IDE, and if I don't have a way out of the loop after it displays the final result the program just asks for another number input. Maybe the professor doesn't want the loop to end and I am just overthinking I don't know, but this is what I have.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
#include <iostream>
#include <math.h> 


using namespace std;

//Prototypes

//Retrieves the operator, operand and returns operator
//and operand

void scan_data(char, double);

//Reads operator and operand and uses switch statement
//to perform correct operator on the operand

double do_nex_op(char, double, double&);

//Reads result and outputs the result of the operator
//and the operand

float do_next_op(double);


int main()
{
    char op;
    double num2;
    double sum;

    
  cout<< "This program is a very basic calculator \n";
  cout<< "use only operators +,-,*,/, or ^";
  cout<<" to raise a number to a power\n\n";

    
  //display operator and operand
    
    scan_data(op, num2);

    
return 0;    

}

// function to obtain original values

void scan_data(char op, double num2)
{
 
   double num;
   double result;
  
      num = do_nex_op ( op, num2, num);
  
      result = do_next_op(num);

}

// performs operation based on operator input

double do_nex_op(char op, double num2, double& num)
{
   num = 0;
  
  cout<< "Enter a valid operator:\n";
  cin >> op;
  
  cout<< "Enter any number:\n";
  cin >> num2;
       switch (op)
        {
            case'+':
                cout << "\n+"<< num2;
                num = num + num2;
                cout<<"\n\nresult so far " << num;
                break;
            case '-':
                cout << "\n-"<< num2;
                num = num - num2;
                cout <<"\n\nresult so far " << num;
                break;
            case '*':
                cout << "\n*"<< num2;
                num = num * num2;
                cout <<"\n\nresult so far "<< num;
                break;
            case '/':
                cout << "\n/"<< num2;
                num = num / num2;
                cout <<"\n\nresult so far "<< num;
                break;
            case '^':
                cout << "\n^"<< num2;
                num = pow(num, num2);
                cout <<"\n\nresult so far "<< num;
                break;
            case 'q':
                cout <<"\nq" <<" 0";
                cout << "\n\nfinal result is"<< num;
            default:
                cout<<"\n\nInvalid operator";
                
                
          }
    
       return (num);
}
// initiate loop
float do_next_op(double num)
{
    double num2;
    char op;
    
    cout<<"\nEnter Next Opertion:\n"<< endl;
    cin>> op;
    
    cout <<"\nEnter next Number: \n"<<endl;
    cin>> num2;
    switch(op)
    {
            case'+':
                cout<<"\n+"<< num2;
                num= num2 + num;
                cout<< "\nresult so far is "<< num;
                break;
            case'-':
                cout<<"\n -"<< num2;
                num= num2 - num;
                cout<<"\nresult so far is "<< num;
                break;
            case'*':
                cout<<"\n*"<< num2;
                num= num2 * num;
                cout<<"\nresult so far is "<< num;
                break;
            case'/':
                cout<<"\n/"<<num2;
                num= num / num2;
                cout << "\nresult so far is "<< num;
                break;
            case'^':
                cout<<"\n ^"<< num2;
                num= pow(num, num2);
                cout << "\nresult so far is "<< num;
                break;
            case 'q':
                cout<<"\nq "<<"0";
                cout<<"\nFinal result is: \n";
                cout<< num;
            default:
                cout<<"\nNot a valid operator";
    }
    
    while (num2 != 'quit')
  {     cout<<"\n\nEnter Next Operation:\n";
        cin>> op;
        cout<<"Enter next number: \n";
        cin>> num2;
     
    switch(op)
    {
            case'+':
                cout<<"\n+"<< num2;
                num= num2 + num;
                cout<< "\nresult so far is "<< num;
                break;
            case'-':
                cout<<"\n -"<< num2;
                num= num2 - num;
                cout<<"\nresult so far is "<< num;
                break;
            case'*':
                cout<<"\n*"<< num2;
                num= num2 * num;
                cout<<"\nresult so far is "<< num;
                break;
            case'/':
                cout<<"\n/"<<num2;
                num= num / num2;
                cout << "\nresult so far is "<< num;
                break;
            case'^':
                cout<<"\n ^"<< num2;
                num= pow(num, num2);
                cout << "\nresult so far is "<< num;
                break;
            case 'q':
                cout<<"\nq "<<"0";
                cout<<"\nFinal result is: \n";
                cout<< num;
            default:
                cout<<"\nNot a valid operator";
    }        
 }              
                    
                    
   return 0;         


}



I know i should just create a seperate function for the switch statement, but when I tried that all hell broke loose and a whole new set of problems arose, so i just utilized copy and paste..
Every time you make a new function, you are making a new op and num2. It isn't connected (doesn't occupy the same memory and therefore doesn't affect) any other version of op and num2 that you have in this program.

How to fix this:
void scan_data(char& op, double& num2)
This will make the first parameter in your function occupy the same memory (and therefore affect) the first parameter in the function call.

Next, I also see:
while (num2 != 'quit')
num2 is a double! It is VERY unlikely that it will ever match this character array.
I still have i a lot to learn as far as how variables are allocated in memory, but I was under the impression that I was only supposed to use & when I was returning something to the previous function. So the & sign really has to do more with memory allocation and use of memory, is that the surface of it?
Topic archived. No new replies allowed.