Can someone explain how to fix this loop?

I want to validate the user's input. The if statement is working exactly how i want it to and the parameters accept the right variable, it's the while loop messing things up. I want two counters, one that increments every time a user answers a question and one that increments every time they get the question right.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 void displayResult(int &nThree, int &dThree, int &resultN, int &resultD, char &slash, char &operand)
{
	int questionCount = 0;
	int correctCount = 0;
	while (questionCount < 8)
	{
		if (nThree == resultN && slash == '/' && dThree == resultD)
		{
			cout << resultN << slash << resultD << endl;
			questionCount++;
			correctCount++;
		}
		else
		{
			cout << "wrong.";
			questionCount++;
		}
	}
}
Last edited on
I'd need to see the code that calls this function to really understand how you're using it.
ok here's the full code.

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
#include <iostream>
#include <string>

using namespace std;

void programInformation();
void inputData(int &nOne, int &dOne, int &nTwo, int &dTwo, int&nThree, int&dThree, char &slash, char &operand);
void calculationFraction(int &nOne, int &dOne, int &nTwo, int &dTwo, int&nThree, int&dThree, int&resultN, int&resultD, char slash, char operand);
void displayResult(int &nThree, int &dThree, int &resultN, int &resultD, char &slash, char &operand);

int main()
{
	int  nOne;
	int  nTwo;
	int  dOne;
	int  dTwo;
	int nThree;
	int dThree;
	int resultN;
	int resultD;
	char again = '%';
	char slash;
	char operand;
	
	while (again == '%')
	{
		programInformation();
		inputData(nOne, dOne, nTwo, dTwo, nThree, dThree, slash, operand);
		calculationFraction(nOne, dOne, nTwo, dTwo, nThree, dThree, resultN, resultD, slash, operand);
		displayResult(nThree, dThree, resultN, resultD, slash, operand);
		cout << "Run program again? Enter '%' to continue." << endl;
		cin >> again;
		
	}
}

void programInformation()
{
	cout << "Welcome to my Fraction Calculation Program!" << endl;
	cout << "Please follow instructions carefully." << endl;

}

void inputData(int &nOne, int &dOne, int &nTwo, int &dTwo, int &nThree, int &dThree, char &slash, char &operand)
{


	cout << "Enter your operation like 1/2 + 1/4." << endl;
	cin >> nOne >> slash >> dOne >> operand >> nTwo >> slash >> dTwo;
	cout << "Enter the expected result." << endl;
	cin >> nThree >> slash >> dThree;
}

void calculationFraction(int &nOne, int &dOne, int &nTwo, int &dTwo, int&nThree, int&dThree, int&resultN, int&resultD, char slash, char operand)
{
	
	if (operand == '+')
	{

		resultN = nOne * dTwo + nTwo * dOne;
		resultD = dOne * dTwo;
	}
	else if (operand == '/')
	{
		resultN = nOne * dTwo;
		resultD = dOne * nTwo;
	}
	else if (operand == '-')
	{
		resultN = nOne * dTwo - nTwo * dOne;
		resultD = dOne * dTwo;
	}
	else if (operand == '*')
	{
		resultN = nOne * dOne;
		resultD = nTwo * dTwo;
	}
}
void displayResult(int &nThree, int &dThree, int &resultN, int &resultD, char &slash, char &operand)
{
	int questionCount = 0;
	int correctCount = 0;
	while (questionCount < 8)
	{
		if (nThree == resultN && slash == '/' && dThree == resultD)
		{
			cout << resultN << slash << resultD << endl;
			questionCount++;
			correctCount++;
		}
		else
		{
			cout << "wrong.";
			questionCount++;
		}
	}
}
Ok. The while loop needs to be moved out of displayResult() and into main().
As it is, each call to displayResult is will cause the loop to evaluate the same parameters 8 times.

since you already have a while loop in main() which loops until the user opts to not continue, I don't know what the purpose of the while loop in displayResult() is.

if you're trying to keep track of number of questions, and correct responses, try this:

1) move questionCount and correctCount to main() and remove the while loop from displayResult.

2) increment questionCount inside the while loop in main.

3) change displayResult to return a bool value, return true if the response was correct, false if incorrect.

4) in main() change the call to displayResult() to use the return value to determine if correctCount should be incremented
1
2
if( displayResult(nThree, dThree, resultN, resultD, slash, operand) )
	correctCount++;



Last edited on
Thank you for the help! I never knew you could use an if statement with a function call, that's pretty interesting. Code is working as intended.
Last edited on
closed account (48T7M4Gy)
1
2
3
if ( displayResult(nThree, dThree, resultN, resultD, slash, operand) == true )
			correctCount++;
		questionCount++;


That's the operative part of your program - is that what you are trying to do?
yup
Topic archived. No new replies allowed.