-
October 28th, 2011, 10:11 AM
#1
Program enters Infinite loop; need help
Okay, my problem is that when people enter a letter when asked for what they know (either Radius, Diameter, or Circumference; it needs to be only a number) the program enters an infinite loop. I need to have it only allow numerical entry, and deny character input for that value. How can I make it do that? For reference, the in statement for Case 1 is Radius; Case 2 is Diameter; Case 3 is Circumference.
Below is my .cpp file.
I don't know too many things about C++ because I have only been learning it for 1 month. Any help would be appreciated
__________________________________________________________________________
/*
Name: Circle Radius/Circumference/Diameter Calculator
Copyright: 2011
Author: Matthew Mirarchi
Date: 27/10/11 17:58
Description: Version 1.0.4 - Will solve for Radius/Circumference/Diameter of
a circle only given one.
*/
#include <iostream> // Needed for output statements
#include <stdio.h> // Needed for pause command system -> ("pause"); executes M$-DOS' pause command
#include <string.h>
#include <windows.h> // Used for string commands
#include <iomanip>
#include <limits> //Needed for command used to prevent users from entering a letter for choice
using namespace std;
int main()
{
long double Radius;
long double Diameter;
long double Circumference;
const long double pi = 3.141592653589793238462643383279502884197169399375105820974944592307816406286;
{
int choice;
bool ProgramOn = true; //Start condition for program to run
while (ProgramOn != false) // While = false, program will run
{
cout << setw(70) << "*************************************************************\n";
cout << setw(70) << "************* Enter Number of Desired Choice ****************\n";
cout << setw(70) << "*************************************************************\n";
cout << setw(70) << "* *\n";
cout << setw(70) << "* 1 - Calculate Diameter and Circumference if Radius known. *\n";
cout << setw(70) << "* 2 - Calculate Circumference and Radius if Diameter known. *\n";
cout << setw(70) << "* 3 - Calculate Diameter and Radius if Circumference known. *\n";
cout << setw(70) << "* 4 - Help/Info. *\n";
cout << setw(70) << "* 5 - Exit. *\n";
cout << setw(70) << "* *\n";
cout << setw(70) << "*************************************************************\n";
cout << endl;
cout << setw(50) << " Enter your choice and press return: ";
cin >> choice;
cin.ignore(2, '\n'); // User enters menu choice
cout << endl;
cout << "\n";
switch (choice) //switch for menu start
{
case 1:
cout << "This choice calculates the diameter and circumference of a circle if a radius is known.\n" << endl;
cout << "What is the radius?";
cout << endl;
cin >> Radius; //user input radius
cout << endl;
//calculations
Diameter = Radius * 2;
Circumference = Diameter * pi;
//output
cout << setprecision(10) << "The circumference of the circle is " << Circumference
<< " and \n the diameter of the circle is " << Diameter << endl;
cout << endl;
cout << endl;
break;
case 2:
cout << "This choice calculates the radius and circumference of a circle if the diameter is known.\n" << endl;
cout << "What is the diameter?";
cout << endl;
cin >> Diameter;
cout << endl;
//calculations
Radius = Diameter / 2;
Circumference = Diameter * pi;
//output
cout << setprecision(10) << "The circumference of the circle is " << Circumference
<< " and \n the radius of the circle is " << Radius << endl;
cout << endl;
cout << endl;
break;
case 3:
cout << "This choice calculates the diameter and radius of a circle if the circumference is known.\n" << endl;
cout << "What is the circumference?";
cout << endl;
cin >> Circumference;
cout << endl;
//calculations
Diameter = Circumference / pi;
Radius = Diameter / 2;
//output
cout << setprecision(10) << "The Radius of the circle is " << Radius
<< " and \n the diameter of the circle is " << Diameter << endl;
cout << endl;
cout << endl;
break;
case 4:
//help file/about
cout << endl;
cout << "Will solve for an unknown Radius, Diameter, and Circumference of a circle. \n";
cout << "Dev-C++ 4.9.9.2 was used to write and compile this. \n"; //Writes Text
cout << " \n"; //Creates a line break
cout << "This was written by Matthew Mirarchi. \n";
cout << " \n";
break;
case 5:
// end program
cout << "End of Program.\n";
ProgramOn = false;
break;
default:
//Prevents user from entering any number except 1,2,3,4,5
if (choice == 6||7||8||9||10)
{
goto insrtgoto;
}
else{
while (!(cin >> choice))
{
insrtgoto:
cout << "Incorrect character entered." << endl;
cin.clear();
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
cout << endl;
break;
}
break;
}
}
}
return 0;
}
}
-
October 28th, 2011, 10:26 AM
#2
Re: Program enters Infinite loop; need help
If you are trying to read to an int, but the user enters a character instead, the stream (cin) enters a failure state. All future operations will fail until (a) the character is successfully read, and (b) cin.clear() is called to clear the error.
It is in general much easier to do your reading into a char or std::string, and then convert to an integer afterwords.
-
October 28th, 2011, 10:29 AM
#3
Re: Program enters Infinite loop; need help
1) Please use code tags when posting code. The code you posted is practically unreadable.
[code] Your code goes here [/code]
2) Explain what this is supposed to do:
Code:
if (choice == 6||7||8||9||10)
I bet it isn't doing what you think it's supposed to do.
Regards,
Paul McKenzie
Tags for this Thread
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|