-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.cpp
61 lines (52 loc) · 1.66 KB
/
main.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#include <iostream>
#include <stdexcept>
using namespace std;
double calculate(double a, double b, char operation) {
switch (operation) {
case '+':
return a + b;
case '-':
return a - b;
case '*':
return a * b;
case '/':
if (b == 0) {
throw runtime_error("Деление на ноль!");
}
return a / b;
default:
throw invalid_argument("Неверная операция");
}
}
int main() {
double a, b;
char operation;
while (true) {
cout << "Введите выражение (например, 5 + 3) или 'q' для выхода: ";
cin >> a;
if (cin.fail()) {
if (cin.eof() || cin.get() == 'q') {
cout << "Выход из программы." << endl;
break;
}
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
cout << "Ошибка ввода. Попробуйте снова." << endl;
continue;
}
cin >> operation >> b;
if (cin.fail()) {
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
cout << "Ошибка ввода. Попробуйте снова." << endl;
continue;
}
try {
double result = calculate(a, b, operation);
cout << "Результат: " << result << endl;
} catch (const exception& e) {
cout << "Ошибка: " << e.what() << endl;
}
}
return 0;
}