PinkieBarto PinkieBarto - 25 days ago 9
C++ Question

Returning to the menu & exiting the program

(C++)
So i'm writing a program for my assignment and it requires for the program to prompt the user to return to the menu or quit the program after each case, the problem is i'm not sure how to implement this efficiently. Any ideas? Also for quitting, I would like to call the last function called 'exit'

#include <iostream> //libraries


using std::cout;
using std::cin;
using std::endl;

int menu(double pi);
int circleArea(double pi);
int circleCircum(double pi); //function declarations for the demanded shapes, passing pi in order to reuse it in both circle calculations
int rectanArea();
int triangArea();
int cubVol();
void exit();

int main()
{
double pi = 3.14159265359; //declaration of pi which I will be using in the circles (passed)
menu(pi);
system("PAUSE");
return 0;
}

int menu(double pi) //menu for choosing a shape
{
int choice = 0;
cout << "Shape Calculator Created By:\n\nPlease select what you wish to calculate:\n\n1 - Area of a Circle\n\n2 - Circumference of a Circle\n\n3 - Area of a Rectangle\n\n4 - Area of a Triangle\n\n5 - Volume of a Cuboid\n\n ";
cin >> choice;
system("CLS");

switch (choice) //switch case for each shape
{
case 1:
circleArea(pi);
break;
case 2:
circleCircum(pi);
break;
case 3:
rectanArea();
break;
case 4:
triangArea();
break;
case 5:
cubVol();
break;
default:
cout << "Invalid input! Please try again.\n\n";
break;
}
return 0;
}

int circleArea(double pi) //the area of circle function
{
double radius = 0;

cout << "Please enter the radius of your circle:\n\n"; //asks for the radius first
cin >> radius;
system("CLS");

cout << "The area of your Circle is:\n\n" << radius*radius*pi << "cm/2\n\n"; //display the calculation which is calculated using the user input, essentially the formula is PI*radius(squared) just reversed
return 0;
}


int circleCircum(double pi) //the circumference of circle function
{
double radius = 0.0;

cout << "Please enter the radius of your circle:\n\n"; //asks for radius first
cin >> radius;
system("CLS");

cout << "The circumference of your Circle is:\n\n" << pi*radius * 2 << "cm\n\n"; //calculates the circumference using the user input, formula is 2*PI*radius but reversed
return 0;
}

int rectanArea() //function for area of rectangle
{
double rectanHeight = 0.0;
double rectanWidth = 0.0;

cout << "Please enter the height of your Rectangle:\n\n"; //asks for input for the height first
cin >> rectanHeight;
system("CLS");

cout << "Height = " << rectanHeight << endl << endl << "Please enter the width of your Rectangle\n\n"; //shows the inputted height above, then asks for input of width
cin >> rectanWidth;
system("CLS");

cout << "The area of your Rectangle is:\n\n" << rectanHeight*rectanWidth << "cm/2\n\n"; //calculates the area of rectangle using the input, formula is height*width then displays it
return 0;
}

int triangArea() //function for area of triangle
{
double triangBase = 0.0;
double triangHeight = 0.0;

cout << "Please enter the base measurement of your Triangle\n\n"; //asks for input of the base first
cin >> triangBase;
system("CLS");

cout << "Base = " << triangBase << endl << endl << "Please enter the height of your Triangle\n\n"; //displays inputted base and then asks for the height
cin >> triangHeight;
system("CLS");

cout << "The area of your Triangle is:\n\n" << triangBase*triangHeight / 2 << "cm/2\n\n"; //calculates area using user input and displays it, formula is base*height/2
return 0;
}

int cubVol() //function for volume of a cuboid
{
double cubLength = 0.0;
double cubWidth = 0.0;
double cubHeight = 0.0;

cout << "Please enter the length of your Cuboid\n\n"; //asks for input of length first
cin >> cubLength;
system("CLS");

cout << "Length = " << cubLength << endl << endl << "Please enter the width of your Cuboid\n\n"; //displays inputted length and asks for the width
cin >> cubWidth;
system("CLS");

cout << "Length = " << cubLength << endl << "Width = " << cubWidth << endl << endl << "Please enter the height of your Cuboid:\n\n"; //displays inputted length and width, asks for the height finally
cin >> cubHeight;
system("CLS");

cout << "The volume of your Cuboid is:\n\n" << cubLength*cubWidth*cubHeight << "cm/3\n\n"; //displays the calculation using inputted information, formula is length*width*height
return 0;

}

void exit()
{
cout << "**************************************" << endl;
cout << "**************************************" << endl;
cout << "******* T H A N K Y O U *******" << endl;
cout << "******* F O R U S I N G *******" << endl;
cout << "******* T H I S P R O G R A M *******" << endl;
cout << "**************************************" << endl;
cout << "**************************************" << endl;
}

Answer

In your main, substitute menu(pi) with:

char choice;
bool exitNow = false;

do{
    menu(pi);
    cout<<"Return (r) or quit (q)?"<<endl;
    cin>>choice;
    if(choice == 'q')
        exitNow = true;
} while (!exitNow);
exit();

It should work even if I haven't tested it.

EDIT: The code above doesn't check if a correct input is entered. This should solve:

char choice = 0;
bool exitNow = false;

do{
    menu(pi);

    do{
        cout<<"Return (r) or quit (q)?"<<endl;
        cin>>choice;
    }
    while( !(choice == 'r' || choice == 'q') && cout<<"Invalid input!"<<endl);

    if(choice == 'q')
        exitNow = true;
} while (!exitNow);
exit();