当前位置: 首页 > ops >正文

C++ 第一阶段项目一:实现简易计算器

目录

一、项目目标

二、功能需求

1. 基本功能

2. 扩展功能(选做)

三、实现思路

1. 主程序流程图

2. 关键步骤

四、代码实现

五、代码说明

1. 输入验证

2. 异常处理

3. 模块化设计

六、运行示例

七、扩展建议

八、总结


一、项目目标

实现一个命令行简易计算器,支持以下功能:

  1. 四则运算(加、减、乘、除)
  2. 用户交互(输入操作数和操作符)
  3. 错误处理(除零错误、无效输入)
  4. 循环运行(用户可选择继续或退出)

二、功能需求

1. 基本功能

  • 用户输入两个数字和一个运算符(+-*/
  • 程序计算结果并输出
  • 支持连续计算(用户可选择是否继续)

2. 扩展功能(选做)

  • 输入验证(防止非数字输入)
  • 支持更多运算(如幂运算 ^、取模 %
  • 使用函数封装逻辑

三、实现思路

1. 主程序流程图

开始↓
显示菜单↓
获取用户输入(操作数1、操作符、操作数2)↓
执行计算↓
显示结果↓
询问是否继续↓
结束 or 循环

2. 关键步骤

  • 输入处理:使用 cin 获取用户输入,注意处理输入错误。
  • 错误检查:检查除零错误和无效操作符。
  • 循环控制:使用 do-while 循环保持程序运行。

四、代码实现

#include <iostream>
#include <limits> // 用于输入验证
using namespace std;// 函数声明
void displayMenu();
double getNumber(const string& prompt);
char getOperator();
void calculate(double num1, char op, double num2);
bool confirmContinue();int main() {char choice = 'y';do {displayMenu();double num1 = getNumber("请输入第一个数字: ");char op = getOperator();double num2 = getNumber("请输入第二个数字: ");calculate(num1, op, num2);choice = confirmContinue();} while (choice == 'y' || choice == 'Y');cout << "感谢使用!再见!" << endl;return 0;
}// 显示菜单
void displayMenu() {cout << "简易计算器\n";cout << "支持的运算符: +, -, *, /\n";
}// 获取数字(带输入验证)
double getNumber(const string& prompt) {double num;while (true) {cout << prompt;if (cin >> num) {break;} else {cin.clear(); // 清除错误标志cin.ignore(numeric_limits<streamsize>::max(), '\n'); // 忽略无效输入cout << "输入错误!请输入一个数字。\n";}}return num;
}// 获取操作符
char getOperator() {char op;while (true) {cout << "请输入操作符 (+, -, *, /): ";cin >> op;if (op == '+' || op == '-' || op == '*' || op == '/') {break;} else {cout << "无效的操作符!请重新输入。\n";}}return op;
}// 执行计算
void calculate(double num1, char op, double num2) {try {switch (op) {case '+':cout << "结果: " << num1 + num2 << endl;break;case '-':cout << "结果: " << num1 - num2 << endl;break;case '*':cout << "结果: " << num1 * num2 << endl;break;case '/':if (num2 == 0) {throw runtime_error("除数不能为零!");}cout << "结果: " << num1 / num2 << endl;break;default:cout << "未知错误!" << endl;}} catch (const exception& e) {cerr << "错误: " << e.what() << endl;}
}// 确认是否继续
bool confirmContinue() {char ch;while (true) {cout << "是否继续计算?(y/n): ";cin >> ch;if (ch == 'y' || ch == 'Y' || ch == 'n' || ch == 'N') {return (ch == 'y' || ch == 'Y');} else {cout << "请输入 y 或 n。\n";}}
}

五、代码说明

1. 输入验证

  • 使用 cin.fail() 检测输入错误。
  • 使用 cin.clear() 和 cin.ignore() 清理输入流。

2. 异常处理

  • 使用 try-catch 捕获除零错误。
  • 抛出 runtime_error 提供错误信息。

3. 模块化设计

  • 将功能拆分为独立函数,提高代码可读性和复用性。

六、运行示例

简易计算器
支持的运算符: +, -, *, /
请输入第一个数字: 10
请输入操作符 (+, -, *, /): *
请输入第二个数字: 5
结果: 50
是否继续计算?(y/n): y
请输入第一个数字: 20
请输入操作符 (+, -, *, /): /
请输入第二个数字: 0
错误: 除数不能为零!
是否继续计算?(y/n): n
感谢使用!再见!

七、扩展建议

  1. 添加更多运算

    case '^': // 幂运算cout << "结果: " << pow(num1, num2) << endl;break;
  2. 使用函数指针或 Lambda 表达式

    using Operation = double (*)(double, double);
    map<char, Operation> operations = {{'+', [](double a, double b) { return a + b; }},{'-', [](double a, double b) { return a - b; }}
    };
  3. 面向对象设计

    class Calculator {
    public:void run();
    private:double add(double a, double b);double subtract(double a, double b);
    };

八、总结

通过本项目,你将掌握:

  • 基本输入输出和用户交互
  • 条件判断与循环控制
  • 函数的封装与调用
  • 异常处理和输入验证
  • 模块化编程思想

这是一个非常适合 C++ 初学者的实践项目,建议多调试并尝试扩展功能!

http://www.xdnf.cn/news/14551.html

相关文章:

  • 正则表达式与C++
  • RA4M2开发IOT(0)----安装e² studio
  • Linux第一个系统程序-进度条(14)
  • Redis 分布式锁、红锁分别是什么?红锁有什么问题?
  • 说说什么是幂等性?
  • 神经网络中的交叉熵(Cross-Entropy)损失函数详解
  • 【知识图谱提取】【阶段总结】【LLM4KGC】LLM4KGC项目提取知识图谱推理部分
  • 57-Oracle SQL Profile(23ai)实操
  • nginx服务器配置时遇到的一些问题
  • Mac电脑-触摸板增强工具-BetterTouchTool
  • 文本分类与聚类:让信息“各归其位”的实用方法
  • 力扣网C语言编程题:多数元素
  • MCPServer编程与CLINE配置调用MCP
  • 1.23Node.js 中操作 mongodb
  • 【Linux-shell】探索Dialog 工具在 Shell 图形化编程中的高效范式重构
  • 让大模型“更懂人话”:对齐训练(RLHF DPO)全流程实战解析
  • 蓝牙 5.0 新特性全解析:传输距离与速度提升的底层逻辑(面试宝典版)
  • 下载链接记录
  • 【Flink实战】 Flink SQL 中处理字符串 `‘NULL‘` 并转换为 `BIGINT`
  • Vue学习笔记
  • 二分查找----1.搜索插入位置
  • C/C++ 高频八股文面试题1000题(一)
  • ROS1/ROS2中工作空间和工作包创建详解
  • 服务网格安全(Istio):用零信任架构重构微服务通信安全
  • 5.3 LED字符设备驱动
  • 深度学习笔记27-LSTM实现糖尿病探索与预测(Pytorch)
  • 实验问题记录:PyTorch Tensor 也会出现 a = b 赋值后,修改 a 会影响 b 的情况
  • 解锁决策树:数据挖掘的智慧引擎
  • IT运维面试常问问题答案
  • QEMU学习之路(10)— RISCV64 virt 使用Ubuntu启动