I've search the forums here and found a few other people with the same problem I have, but I'm not sure I understand the solutions that have been presented.

I have a simple geometry calculator I'm working on as C++ practice. My program displays a menu and asks for the user to input a number to select a function. When the user enters a character instead of a number the program loops endlessly.

Is there a simple way to catch the char input and ask the user to fix his choice, similar to the way my program handles a user entering a number that isn't in the menu?

``````#include <iostream>
#include <cmath>
using namespace std;

void wiseass();
void square();
void circle();
void triangle();

double
choice,
length,
area,
base,
height;

int main() {

//Introduce the program and get the user's choice
cout << "This is a simple geometry calculator.\n";
cout << "Would you like to find the area of a:\n";
cout << "(1) Square\n";
cout << "(2) Circle?\n";
cout << "or\n";
cout << "(3) Triangle?\n\n";
cout << "Please type the number that corresponds to your selection =>   ";
cin >> choice;

//Give the wiseass a chance to get his selection right
while (choice != 1 && choice != 2 && choice != 3 && choice !=42)
{
wiseass(); //call wiseass function
}

// (1) Call function for area of square
if (choice == 1)
{ square(); }

// (2) Call function for area of circle
else if (choice == 2)
{ circle(); }

// (3) Call function for area of triangle
else if (choice == 3)
{ triangle(); }

//Easter egg
else if (choice == 42)
{
cout << "\n42 is the ultimate answer to life, the universe, and everything. Since you already possess this answer, you obviously don't need this calculator. Goodbye!";
}

cout << "\n\n<END PROGRAM>\n\n";

return 0;
}

//###############################
//# When Dealing with a wiseass #
//###############################
void wiseass()
{

//If he enters a negative number
if (choice < 1)
{
cout << "\n\nThese are POSITIVE numbers, as in, GREATER than zero. Try it again...\n\n";
}

//If he enters a number not in the menu
else if (choice > 3 && choice != 42)
{
cout << "\nTry entering a number that's actually in the menu...\n\n";
}

cout << "Would you like to find the area of a:\n";
cout << "(1) Square\n";
cout << "(2) Circle?\n";
cout << "or\n";
cout << "(3) Triangle?\n\n=>   ";
cin >> choice;
}

//##################################
//# (1) Solve the area of a square #
//##################################
void square()
{
cout << "\n\nPlease enter the length of the sides =>   ";
cin >> length;

//solve
area=length*length;

//Display result
cout << "\nThe area of your square is: " << area << endl;
}

//##################################
//# (2) Solve the area of a circle #
//##################################
void circle()
{

//solve

//Display result
cout << "\nThe area of your circle is: " << area << endl;
}

//####################################
//# (3) Solve the area of a triangle #
//####################################
void triangle()
{
cout << "\nPlease enter the length of your triangle's base =>   ";
cin >> base;
cin >> height;

//solve
area=(base*height)/2;

//Display result
cout << "\nThe area of your triangle is: " << area << endl;
}``````

Be gentle. I'm a noob. ;(

## All 2 Replies

Is there a simple way to catch the char input and ask the user to fix his choice, similar to the way my program handles a user entering a number that isn't in the menu?

Read all your inputs as strings. Test the string for all digits. If correct, convert the string to a value and continue.

[minor rant]

Be gentle. I'm a noob. ;(

This is and always has been one of the most obnoxious requests we get. What makes you think we can't tell you are a noob? Doesn't your question already implicitly state it? :icon_rolleyes:
[/minor rant]

Thank you kindly. Easy enough. :)

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, learning, and sharing knowledge.