Click here to Skip to main content
15,889,335 members
Please Sign up or sign in to vote.
4.00/5 (1 vote)
See more:
I created a C++ program to compute a student's average grade. The first part works, but when I type "done" to exit, my program goes through an infinite loop and won't stop producing numbers.

Here is my code:

C++
#include <iostream>

using namespace std ;

void studentGrade (string) ;

int main ()
{
	string name ;
	int scoreOne, scoreTwo, scoreThree, scoreFour, scoreFive, scoreSix, scoreSeven, scoreEight, scoreNine, scoreTen ;
	float average = 0 ;			//stores the average of all grades
	float total = 0 ;			//stores sum of grades
	char letterGrade ;			//stores the final letter grade of student
	name = "zero" ;
	studentGrade (name) ;
	
}
void studentGrade (string name)
{
	int scoreOne, scoreTwo, scoreThree, scoreFour, scoreFive, scoreSix, scoreSeven, scoreEight, scoreNine, scoreTen ;
	char letterGrade ;
	float average = 0 ;
	float total = 0 ;
	while (name != "done")
	{
		cout << "Enter student's name." << endl ;
		getline (cin, name) ;
		cin.ignore () ;
		if (name != "done")
		{
			cout << "Enter " << name << "'s 10 test scores." ;
			cin >> scoreOne >> scoreTwo >> scoreThree >> scoreFour >> scoreFive >> scoreSix >> scoreSeven >> scoreEight >> scoreNine >> scoreTen ;
			total = scoreOne + scoreTwo + scoreThree + scoreFour + scoreFive + scoreSix + scoreSeven + scoreEight + scoreNine + scoreTen ;
			average = total / 10 ;
			if (average > 89.5)
				letterGrade = 'A' ;
			else if (average > 79.5)
				letterGrade = 'B' ;
			else if (average > 69.5)
				letterGrade = 'C' ;
			else if (average > 59.5)
				letterGrade = 'D' ;
			else
			letterGrade = 'F' ;
		cout << "Student's name: " << name << endl ;
		cout << "Average Grade: " << average << endl ;
		cout << "Letter Grade: " << letterGrade << endl ;
		name = "zero" ;
		}
		else
			cout << "All student's done." << endl ;
	}
	cout << "All student's done." << endl ;
}


What I have tried:

When I type names, the program works properly, but when I enter "done" to exit, it doesn't. I was just wondering if I am missing something to exit the loop or if I didn't do something right. Thank you for helping!
Posted
Updated 12-Nov-17 9:43am
Comments
Jingchun Su 12-Nov-17 15:22pm    
do you have files form your computer?
Jingchun Su 12-Nov-17 16:11pm    
Where's the grade E?
Jingchun Su 12-Nov-17 16:12pm    
some of the students have the grade F??

Quote:
while (name != "done")
{
cout << "Enter student's name." << endl ;
getline (cin, name) ;
cin.ignore () ;
if (name != "done")
{
cout << "Enter " << name << "'s 10 test scores." ;
cin >> scoreOne >> scoreTwo >> scoreThree >> scoreFour >> scoreFive >> scoreSix >> scoreSeven >> scoreEight >> scoreNine >> scoreTen ;
total = scoreOne + scoreTwo + scoreThree + scoreFour + scoreFive + scoreSix + scoreSeven + scoreEight + scoreNine + scoreTen ;

Move the cin.ignore(); statement, in order to obtain
C++
while (name != "done")
	{
		cout << "Enter student's name." << endl ;
		getline (cin, name) ;
		
		if (name != "done")
		{
			cout << "Enter " << name << "'s 10 test scores." ;
			cin >> scoreOne >> scoreTwo >> scoreThree >> scoreFour >> scoreFive >> scoreSix >> scoreSeven >> scoreEight >> scoreNine >> scoreTen ;
            cin.ignore (); // <--- moved here
			total = scoreOne + scoreTwo + scoreThree + scoreFour + scoreFive + scoreSix + scoreSeven + scoreEight + scoreNine + scoreTen ;
 
Share this answer
 
Comments
Jingchun Su 12-Nov-17 15:50pm    
Are those good solutions?
CPallini 12-Nov-17 16:02pm    
Better than your, at least :-)
(Just kidding, of course)
Jingchun Su 12-Nov-17 16:09pm    
lol
Member 13479017 12-Nov-17 16:19pm    
That fixed the problem...thank you very much!
CPallini 13-Nov-17 3:49am    
You are welcome.
Try changing the loops to something like this :

C++
while( true )
{
    cout << "Enter student's name." << endl;
    getline( cin, name );
    cin.ignore();
    if( name == "done" )
        break;
    // continue logic here
}
 
Share this answer
 
v4
Just add
break
where you think you need to stop the loop.
 
Share this answer
 
Comments
CPallini 12-Nov-17 16:04pm    
The OP already has a stop condition (in the while statement) the problem arises because cin doesn't consume the newline character.
Jingchun Su 12-Nov-17 16:10pm    
okay

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900