In: Computer Science
The following code is inside a do while loop. choice is supposed to be an integer input by the user. However, when a character is put instead of an integer, the code loops infinitely. Putting break; or exit(); after the catch statements terminates the whole program, which is wrong. How can i fix this?
#include <iostream>
#include <vector>
#include <iomanip>
#include<stdlib.h>
#include <cctype>
#include "MyGrades.h"
using namespace std;
int main ()
{
int choice; // user input for menu selection
double quiz, program, test; // user input for grades
MyGrades a; // class declaration
cout << fixed << setprecision(2);
cout << "Welcome to My Grades APP. " << endl;
do {
cout << "\nMain Menu" << endl << endl;
cout << " 1. Set A quiz Grade" << endl
<< " 2. Set A Programming Assignment Grade" << endl
<< " 3. Set A Test Grade" << endl
<< " 4. Show All quiz Grades" << endl
<< " 5. Show All Programming Assignment Grades" << endl
<< " 6. Show All Test Grades" << endl
<< " 7. Show Overall Grades" << endl
<< " 9. Exit The Program" << endl << endl;
cout << "Enter your choice ---> ";
cin >> choice;
try {
if (!isdigit(choice))
throw choice;
} catch (char choice) {
cout << "Error *** Incorrect input - You entered a character" << endl;
cout << "Enter a Positive Integer" << endl << endl;
}
switch(choice)
{
case 1: cout << "\nEnter Quiz grade: ";
cin >> quiz;
a.setQuiz(quiz);
break;
case 2: cout << "\nEnter A Programming Assignment grade: ";
cin >> program;
a.setProgram(program);
break;
case 3: cout << "\nEnter A Test grade: ";
cin >> test;
a.setTest(test);
break;
case 4: cout << "\nShow All Quiz grades with Average." << endl;
a.getQuiz();
break;
case 5: cout << "\nShow All Programming Assignment grades with Average" << endl;
a.getProgram();
break;
case 6: cout << "\nShow all Test Grades with Average" << endl;
a.getTest();
break;
case 7: cout << "\nShow Overall Grades." << endl;
a.showAll();
break;
case 9:
break;
default:
cout << "\nInvalid Choice" << endl;
break;
}
} while (choice != 9);
cout << "\nImplemented by Emily Leyendecker and Maxwell Yi" << endl
<< "February - 2017" << endl << endl;
return 0;
}
Answer:
goto for keep the program alive even in case of a non int input and the 2nd one is the solution of infinite loop .Here is the fixed code :
#include<iostream>
#include<cstdlib>
#include<fstream>
#include<cmath>
using namespace std;
int main()
{
int a[30];
int s;
fstream file;
int sum=0;
int q=0;
double averge;
double st;
int standard_deviation;
int avg;
int square;
cout<<"\t How many person's tempurature you
wanna save ";
cin>>s;
int temp=0;
for(int i=0;i<s;i++)
{
a[i]=rand()%100;
}
cout<<"\t \t YOUR DATA HAS been saved in a file
check file for results..."<<endl;
file.open("temps.txt",ios::out|ios::app|ios::in);
for(int i=0;i<s;i++)
{
file<<a[i]<<endl;
sum=sum+a[i];
avg=sum/s;
st=avg-a[i];
int
s=-1*(st);
square=s*s;
temp=temp+square;
temp=temp/s;
standard_deviation=sqrt(temp);
}
file<<"Mean
="<<avg<<endl;
file<<"standard deviation
="<<standard_deviation<<endl;
file.close();
}