Я хочу сделать так, что если в начале введен символ вместо 1, 2, 3 или 4, он зациклится, кроме как
cout << "You have entered a incorrect operator" << endl;
Я пробовал несколько вещей, включая default:
случай, но это, кажется, не влияет на это.
Кто-нибудь может пролить свет?
#include <iostream>
#include <string>
void start()
{
using namespace std;
cout << "Welcome to my Basic Mini-Calculator!" << endl;
}
int choice()
{
using namespace std;
int uChoice;
cout << endl << "What do you want to do?" << endl;
cout << "1) Add" << endl;
cout << "2) Subtract" << endl;
cout << "3) Multiply" << endl;
cout << "4) Divide" << endl;
cout << endl << "Waiting for input... (enter a number): ";
cin >> uChoice;
cout << endl;
while( uChoice != 1 && uChoice != 2 && uChoice != 3 && uChoice != 4 );
switch ( uChoice )
{
case 1:
cout << endl << "You chose addition." << endl;
break;
case 2:
cout << endl << "You chose subtraction." << endl;
break;
case 3:
cout << endl << "You chose multiplication." << endl;
break;
case 4:
cout << endl << "You chose division." << endl;
break;
}
return uChoice;}
int input( bool i = false )
{
using namespace std;
string text;
text = ( i == true ) ? "Enter another number: " : "Enter a number: ";
cout << endl << text;
float number;
cin >> number;
return number;
}
int work( int one, int two, int todo )
{
using namespace std;
float answer;
switch ( todo )
{
case 1:
answer = one + two;
break;
case 2:
answer = one - two;
break;
case 3:
answer = one * two;
break;
case 4:
answer = one / two;
break;
default: cout << "Please choose a proper number (1-4)" << endl;
}return answer;
}
void answer( int theanswer )
{
using namespace std;
cout << endl << "The answer is " << theanswer << "." << endl;
cout << endl << "Hit Return to exit.";
cin.clear();
cin.ignore( 255, '\n' );
cin.get();
}
int main()
{
using namespace std;
start();
int todo = choice();
float one = input();
float two = input( true );
float theanswer = work( one, two, todo );answer( theanswer );
return 0;
}
Просто добавьте do
:
do
{
cout << endl << "What do you want to do?" << endl;
cout << "1) Add" << endl;
cout << "2) Subtract" << endl;
cout << "3) Multiply" << endl;
cout << "4) Divide" << endl;
cout << endl << "Waiting for input... (enter a number): ";
cin >> uChoice;
cout << endl;
} while( uChoice != 1 && uChoice != 2 && uChoice != 3 && uChoice != 4 );
Когда вы пытаетесь прочитать число, но получаете неверный ввод для этого, поток переходит в «состояние сбоя». Вы можете проверить это с помощью cin.fail () или использовать весь поток в качестве аргумента:
// try reading
while(!(cin >> n))
{
cin.clear(); // reset fail state
string s;
getline(cin, s); // discard remaining line
}
Тем не менее, в следующий раз, пожалуйста, уменьшите ваш код до минимального примера.