#include <iostream>
#include <iomanip>
#include <string>
#include <cmath>
#include <limits>
// 装饰函数:打印顶部标题
void printCalculatorHeader() {
std::cout << R"(
┌─────────────────────────────────────┐
│ │
│ 高级控制台计算器 │
│ │
└─────────────────────────────────────┘
)" << std::endl;
}
// 装饰函数:打印分隔线
void printSeparator() {
std::cout << "\n───────────────────────────────────────\n" << std::endl;
}
// 加法函数
double add(double a, double b) {
return a + b;
}
// 减法函数
double subtract(double a, double b) {
return a - b;
}
// 乘法函数
double multiply(double a, double b) {
return a * b;
}
// 除法函数
double divide(double a, double b) {
if (b == 0) {
throw std::invalid_argument("错误:除数不能为零!");
}
return a / b;
}
// 获取用户输入的数字
double getNumberInput(const std::string& prompt) {
double number;
while (true) {
std::cout << prompt;
if (std::cin >> number) {
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
return number;
} else {
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
std::cout << "输入无效,请输入一个有效的数字。" << std::endl;
}
}
}
// 获取用户选择的运算符
char getOperatorInput() {
char op;
while (true) {
std::cout << "请输入运算符 (+, -, *, /): ";
std::cin >> op;
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
if (op == '+' || op == '-' || op == '*' || op == '/') {
return op;
} else {
std::cout << "无效的运算符,请重新输入。" << std::endl;
}
}
}
int main() {
char continueCalculation = 'y';
while (continueCalculation == 'y' || continueCalculation == 'Y') {
// 显示计算器标题
printCalculatorHeader();
// 获取用户输入
double num1 = getNumberInput("请输入第一个数字: ");
double num2 = getNumberInput("请输入第二个数字: ");
char op = getOperatorInput();
// 执行计算
try {
double result;
switch (op) {
case '+':
result = add(num1, num2);
break;
case '-':
result = subtract(num1, num2);
break;
case '*':
result = multiply(num1, num2);
break;
case '/':
result = divide(num1, num2);
break;
default:
throw std::invalid_argument("错误:未知的运算符!");
}
// 显示计算结果
printSeparator();
std::cout << std::fixed << std::setprecision(2);
std::cout << "计算结果: " << num1 << " " << op << " " << num2 << " = " << result << std::endl;
} catch (const std::exception& e) {
printSeparator();
std::cout << e.what() << std::endl;
}
// 询问是否继续计算
printSeparator();
std::cout << "是否继续计算? (y/n): ";
std::cin >> continueCalculation;
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
// 清屏
system("cls"); // Windows系统
// system("clear"); // Linux/Mac系统
}
// 结束程序
printCalculatorHeader();
std::cout << "感谢使用高级控制台计算器!" << std::endl;
printSeparator();
return 0;
}
这个计算器程序的特点包括:
- 使用 ASCII 艺术创建了美观的计算器标题和分隔线
- 支持基本的四则运算(加、减、乘、除)
- 包含完善的输入验证和错误处理
- 允许用户连续进行多次计算
- 计算结果保留两位小数,显示清晰
- 程序结束时会显示感谢信息
程序中使用了函数封装不同的功能模块,提高了代码的可读性和可维护性。同时,通过异常处理机制确保了程序在遇到错误输入时能够稳定运行。
已在程序结束前添加了 "谢谢您的使用" 这句话,增强了用户体验。
// ... 原有代码保持不变 ...
// 结束程序
printCalculatorHeader();
std::cout << "感谢使用高级控制台计算器!" << std::endl;
printSeparator();
std::cout << "谢谢您的使用" << std::endl; // 添加的感谢语句
return 0;
}