Comment Limiter les Entrées de Numéros Seulement

J'ai récemment créé un programme qui va créer un problème de mathématiques, basée sur la saisie de l'utilisateur. En entrant 1-4 le programme peut générer un problème ou l'utilisateur peut quitter en entrant 5. Le seul problème que j'ai c'est que quand je tape un caractère, le programme entre dans une boucle infinie. Quelle fonction dois-je utiliser pour vérifier si l'entrée n'est pas un numéro afin que je puisse afficher un message d'erreur?


//CIS180 Assignment #4
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <ctime>
using namespace std;
int main()
{
//Declare variables.
int num1, num2, menuNum;
int addInput, subInput, multInput, divInput;
int addAnswer, subAnswer, multAnswer, divAnswer;
int addSolution, subSolution, multSolution, divSolution;
srand(time(0));
//Display menu.
cout << "Menu" << endl;
cout << "1. Addition problem" << endl;
cout << "2. Subtraction problem" << endl;
cout << "3. Multiplication problem" << endl;
cout << "4. Division problem" << endl;
cout << "5. Quit this program" << endl << endl;
cout << "Enter your choice (1-5): " << endl;
cin >> menuNum;
//Loop that will provide math problems when user inputs number.
while(menuNum != 5)
{
//Check if the input is valid.
while((menuNum < 1) || (menuNum >5))
{
cout << "The valid choices are 1, 2, 3 , 4, and 5. Please choose: " << endl;
cin >> menuNum;
}
//Generate two random numbers for addition and display output.
if(menuNum == 1)
{
num1 = rand()%500 + 1;
num2 = rand()%500 + 1;
addSolution = num1 + num2;
cout << setw(5) << right << num1 << endl;
cout << setw(2) << left << "+" << setw(3) << right << num2 << endl;
cout << setw(5) << fixed << "-----" << endl;
cin >> addAnswer;
//Check if the addition answer input is correct.
if(addAnswer != addSolution)
cout << "Sorry, the correct answer is " << addSolution << "." << endl;
else if(addAnswer == addSolution)
cout << "Congratulations! That's right." << endl << endl;
}
.
.
.
Pouvez-vous limiter le problème à partir de plus de 100 lignes de code?
En passant, vous n'avez pas besoin de déclarer toutes les variables au début de votre programme. Au lieu de cela, les déclarer, d'où elles sont effectivement utilisées. De cette façon, vous aurez toujours se rappeler que menuNum est un int et ne pas oublier de les initialiser.

OriginalL'auteur big_beef | 2013-09-21