因此,對於這個程序,用戶必須輸入一個從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