Quería hacer una calculadora con c ++, y no quería que mi calculadora hiciera solo cálculos de 2 números, así que "hice" una calculadora de 2 operadores. Además, quiero saber si hay una manera de hacer esto sin dos declaraciones de cambio para que sea más fácil de leer para las máquinas y los programadores.
#include <iostream> int top1 ; int main() { char operatr1, operatr2; float num1, num2, num3, num4 ; std::cout << "Please choose the first operator ( +, -, *, /):"; std::cin >> operatr1 ; std::cout << "Please choose the second operator ( +, -, *, /):"; std::cin >> operatr2; std::cout << "Please enter three numbers: " << std::endl; std::cin >> num1 >> num2 >> num3; switch (operatr1) { case '+': int top1{ num1 + num2 }; break; case '-': int top1{ num1 - num2 }; break; case '*': int top1{ num1 * num2 }; break; case '/': int top1{ num1 / num2 }; break; default: std::cout << "Error! The operator is not correct" << std::endl << "The operators are ( +, -, *, / )."; break; } switch (operatr2) { case '+': int top2{ top1 + num3 }; std::cout << "The answer is:" << " " << top2; break; case '-': int top2{ top1 - num3 }; std::cout << "The answer is:" << " " << top2; break; case '*': int top2{ top1 * num3 }; std::cout << "The answer is:" << " " << top2; break; case '/': int top2{ top1 / num3 }; std::cout << "The answer is:" << " " << top2; break; default: std::cout << "Error! The operator is not correct" << std::endl << "The operators are ( +, -, *, / )."; break; } }Defina top1 fuera de la sentencia switch. El top1 global que define no tiene el valor que espera, porque define un nuevo top1 dentro de cada declaración de case . Su compilador debería advertirle sobre esto (en realidad, creo que debería ser un error en este caso).
Además, dado que num1 a num4 son flotantes, su top1 y top2 también deberían ser float s, no int s
Efectivamente, elimine int top1 de sus variables globales, luego en su principal:
float top1 = 0; switch ( operatr1 ) { case '+': top1 = num1 + num2; break; // ... continue with other cases here } Luego, para su segunda declaración de switch , top1 estará visible y tendrá el valor correcto.
Podrías hacer uso de una función:
int Evaluate(const char operator, const int num1, const int num2) { bool is_valid_operator = true; int result = 0; switch (operator) { case '+': result = num1 + num2; break; case '-': result = num1 - num2; break; case '/': // Note: integer division. result = num1 / num2; break; case '*': result = num1 * num2; break; default: result = 0; is_valid_operator = false; break; } if (is_valid_operator) { std::cout << "Result of " << num1 << " " << operator << " " << num2 << "\n"; std::cout << result << "\n"; } return result; }Su principal se simplificaría a:
//... int top1 = Evaluate(operatr1, num1, num2); int top2 = Evaluate(operatr2, top1, num3);