@ PanthersFan92 уже упоминал о вашей ошибке, но я хотел бы дать несколько советов о том, что можно сделать лучше, здесь, в вашем коде.Также есть некоторые недостатки.
прежде всего using namespace std;
- не очень хорошая практика.Вы можете прочитать здесь почему.
Функция не нуждается в точке с запятой в конце.Кроме того, ваша функция просто производит вывод и, следовательно, нет необходимости возвращать число.Поскольку вы сделали d_Zahl1
и d_Zahl2
глобальными, нет необходимости передавать их как аргументы.
, поэтому
double add(double d_Zahl1, double d_Zahl2){...};
становится
void add(){...}
Вы пишете:
cout << "\n\n\n" << d_Zahl1 << c_Operator << d_Zahl2 << '=' << d_Ergebnis;
4 раза.Вы можете поместить это в функцию:
void print_result(double d_Ergebnis) {
std::cout << "\n\n\n" << d_Zahl1 << ' ' << c_Operator << ' ' << d_Zahl2 << " = " << d_Ergebnis << '\n';
}
(Вы также пропустили '\n'
в конце).
do {...} while (c_Operator != '+' || c_Operator != '-' || c_Operator != '*' || c_Operator != '/');
довольно уродливо.вместо этого используйте:
bool done = false
while (!done){
done = true
switch (){
...
default: done = false
}
}
system("pause")
, вероятно, является самым злым здесь.избегать любой ценой.Вы можете прочитать здесь почему.Просто имейте в виду, что это добавляет массу накладных расходов при загрузке всех оконных (!) Инструкций.Вместо этого используйте что-то вроде:
void system_pause() {
std::cout << "press enter to continue . . . ";
if (!std::cin.good()) {
std::cin.clear();
}
else {
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}
и затем звоните system_pause()
, когда вам это нужно.Еще несколько вещей:
Ваша multiply
функция делит вместо умножения.
Вы повторяете себя с помощью "Input second number"
и т. Д. - Вы также можете использовать это в функциях.
Вам необходимо #include <limits>
при использовании.
Старайтесь избегать std::endl
- всегда используйте '\n'
.
полный код:
#include <iostream>
#include <limits>
double d_Zahl1 = 0.0;
double d_Zahl2 = 0.0;
double d_Ergebnis = 0.0;
char c_Operator = ' ';
void system_pause() {
std::cout << "Press enter to continue . . . ";
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}
void print_result(double d_Ergebnis) {
std::cout << "\n\n\n" << d_Zahl1 << ' ' << c_Operator << ' ' << d_Zahl2 << " = " << d_Ergebnis << '\n';
}
void add(){
d_Ergebnis = d_Zahl1 + d_Zahl2;
print_result(d_Ergebnis);
}
void substract(){
d_Ergebnis = d_Zahl1 - d_Zahl2;
print_result(d_Ergebnis);
}
void divide(){
d_Ergebnis = d_Zahl1 / d_Zahl2;
print_result(d_Ergebnis);
}
void multiply(){
d_Ergebnis = d_Zahl1 * d_Zahl2;
print_result(d_Ergebnis);
}
void input_first_number() {
while (std::cout << "Please enter your first number: " && !(std::cin >> d_Zahl1)) {
std::cout << "That's not a valid input. Try again.\n";
system_pause();
std::cout << '\n';
}
}
void input_second_number() {
while (std::cout << "Please enter your second number: " && !(std::cin >> d_Zahl2)) {
std::cout << "That's not a valid input. Try again.\n";
system_pause();
std::cout << '\n';
}
}
int main(){
std::cout << "\t----------Calculator----------\n\n";
input_first_number();
std::cout << "Please enter your operator (+,-,*,/): ";
bool done = false;
while (!done){
std::cin >> c_Operator;
done = true;
switch (c_Operator) {
case '+':
input_second_number();
add();
break;
case '-':
input_second_number();
substract();
break;
case '*':
input_second_number();
multiply();
break;
case '/':
input_second_number();
divide();
break;
default:
std::cout << "-----Wrong input!-----\n\nPlease enter your operator (+,-,*,/): ";
done = false; //repeat if wrong input
}
}
system_pause();
return 0;
}
пример выполнения:
----------Calculator----------
Please enter your first number: 2938
Please enter your operator (+,-,*,/): /
Please enter your second number: 193
2938 / 193 = 15.2228
Press enter to continue . . .
с неправильным вводом:
----------Calculator----------
Please enter your first number: a
That's not a valid input. Try again.
Press enter to continue . . .
Please enter your first number: 123
Please enter your operator (+,-,*,/): a
-----Wrong input!-----
Please enter your operator (+,-,*,/): *
Please enter your second number: 678
123 * 678 = 83394
Press enter to continue . . .