C++代码计算器

#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;
}

这个计算器程序的特点包括:

  1. 使用 ASCII 艺术创建了美观的计算器标题和分隔线
  2. 支持基本的四则运算(加、减、乘、除)
  3. 包含完善的输入验证和错误处理
  4. 允许用户连续进行多次计算
  5. 计算结果保留两位小数,显示清晰
  6. 程序结束时会显示感谢信息

程序中使用了函数封装不同的功能模块,提高了代码的可读性和可维护性。同时,通过异常处理机制确保了程序在遇到错误输入时能够稳定运行。

已在程序结束前添加了 "谢谢您的使用" 这句话,增强了用户体验。

// ... 原有代码保持不变 ...

// 结束程序
printCalculatorHeader();
std::cout << "感谢使用高级控制台计算器!" << std::endl;
printSeparator();
std::cout << "谢谢您的使用" << std::endl;  // 添加的感谢语句

return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值