因此,对于这个程序,用户必须输入一个从1到4的数字。目前,如果他错误地输入了一个不同的数字,程序会提醒用户,但问题与字符有关。如果用户输入除数字以外的任何类型的字符,则循环变成无限循环。如何在这种情况下验证用户输入?
我想知道这是否可能在C的介绍级别来完成++(很像目前的代码)
下面是代码
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <ctime>
using namespace std;
int main()
{
int firstNum,
secondNum,
subFirstNum,
subSecNum,
operNum,
num; // User's input answer for operations
bool temBool = true; // Temporary boolean used in the while loop
unsigned seed; // Random generator seed
// Use the time function to get a "seed" value for srand
seed = time(0);
srand(seed);
//Start of the loop
while (temBool)
{
//Random generated operands
firstNum = rand() % 40 + 10;
secondNum = rand() % 40 + 10;
// Set of randoms numbers for substraction where the denominator is always
// lower than the numerator.
subFirstNum = rand() % 30 + 20;
subSecNum = rand() % 10 + 10;
// Menu of Math Tutor
cout << "Math Tutor - Main Menu";
cout << endl << endl;
cout << "1. Adittion\n";
cout << "2. Subtraction\n";
cout << "3. Multiplication\n";
cout << "4. Exit Program\n";
cout << endl << endl;
cout << "Choose your operation to practice (1-4) ";
cin >> operNum;
cout << endl << endl;
// Switch for the menu's options
switch (operNum)
{
srand(seed);
case 1:
cout << "Working with addition\n";
cout << setw(3) << firstNum << "\n"
<< "+" << secondNum << "\n"
<< "---\n";
cout << "Your answer: ";
cin >> num;
if(num == firstNum + secondNum)
{
cout << "Correct answer: "
<< firstNum + secondNum << " Congratulations!\n";
}
else
{
cout << "Correct answer: "
<< firstNum + secondNum << " Sorry!\n";
}
cout << endl << endl;
break;
case 2:
cout << "Working with subtraction\n";
cout << setw(3) << subFirstNum << "\n"
<< "-" << subSecNum << "\n"
<< "---\n";
cout << "Your answer: ";
cin >> num;
if(num == subFirstNum - subSecNum)
{
cout << "Correct answer: "
<< subFirstNum - subSecNum << " Congratulations!\n";
}
else
{
cout << "Correct answer: "
<< subFirstNum + subSecNum << " Sorry!\n";
}
cout << endl << endl;
break;
case 3:
cout << "Working with multiplication\n";
cout << setw(3) << firstNum << "\n"
<< "*" << secondNum << "\n"
<< "---\n";
cout << "Your answer: ";
cin >> num;
if(num == firstNum * secondNum)
{
cout << "Correct answer: "
<< firstNum * secondNum << " Congratulations!\n";
}
else
{
cout << "Correct answer: "
<< firstNum * secondNum << " Sorry!\n";
}
cout << endl << endl;
break;
case 4:
cout << "Thank you for using Math Tutor.\n\n";
temBool = false;
break;
default:
cout << "Incorrect menu seletion. Please choose between 1 and 4.\n\n";
break;
return 0;
}
}
}
失败的流提取将该流引发到失败状态。你必须[**清除()**](http://en.cppreference.com/w/cpp/io/basic_ios/clear)它有另一个去(我强烈建议通过换行消耗所有数据,同时做所以,免得你编码一个完全不同的,同样烦人的无限循环)。你应该在销售点测试提取。 'if(std :: cin >> operNum)'...... – WhozCraig 2014-10-07 21:31:11
尝试类似于'cin.clear();'接着'cin.ignore(INT_MAX);'在输入之前。 – RPGillespie 2014-10-07 21:37:10