Как я могу предупредить пользователя моей программы, что он ввел ошибку в условии математической задачи?
Моя программа должна предупреждать пользователей, когда они вводят "+/*" подряд или символы, которые нельзя использовать в задаче (например, буквы или символы '%"@' и т. д.), или подобные ошибки. И еще вопрос как закинуть все в цикл на повторный ввод задачи? Результат должен быть примерно таким:
Enter the task: 5+*3-(3+2)
Sorry, you have a mistake in you task, try again: 5ga3-(3+2)
Sorry, you have a mistake in you task, try again: 5+3-(3+2)
Result: 3
Вот мой код:
#include <iostream>
using namespace std;
float task();
float factor();
float brackets();
float number();
int main()
{
cout << "Enter the task: ";
float res = task();
cout << "Result: " << res << endl;
}
float task()
{
float x = factor();
for (;;)
{
char c = cin.get();
if (c == '*')
cout << "ahuenno)";
switch (c)
{
case '+':
x += factor();
break;
case '-':
x -= factor();
break;
default:
cin.putback(c);
return x;
}
}
}
float factor()
{
float x = brackets();
for (;;)
{
char c = cin.get();
if (c == '*')
cout << "ahuenno)";
switch (c)
{
case '*':
x *= brackets();
break;
case '/':
x /= brackets();
break;
case '^':
x = pow(x, brackets());
break;
default:
cin.putback(c);
return x;
}
}
}
float brackets()
{
char c = cin.get();
if (c == '(')
{
float x = task();
cin.get();
return x;
}
else
{
cin.putback(c);
return number();
}
}
float number()
{
float res = 0;
for (;;)
{
char c = cin.get();
if (c >= '0' && c <= '9')
res = res * 10 + c - '0';
else
{
cin.putback(c);
return res;
}
}
}