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

qt中写一个简易的计算器

以下是添加了详细代码注释的版本:

```cpp
#include <iostream>using namespace std;定义加法函数(已注释掉)
//int add(int a, int b) {
//    return a + b;
//}定义减法函数(已注释掉)
//int min(int a, int b) {
//    return a - b;
//}定义乘法函数(已注释掉)
//int mul(int a, int b) {
//    return a * b;
//}定义除法函数(已注释掉)
//double diliv(int a, int b) {
//    if (b == 0) { // 检查除数是否为零
//        cout << "错误:除数不能为零!" << endl;
//        return 0; // 返回 0 表示错误
//    }
//    return (double)a / b; // 返回浮点数结果
//}// 定义一个通用的计算器函数,接受两个整数和一个函数指针作为参数
int calculator(int a, int b, int(*p)(int a, int b)) {cout << "开始计算" << endl;// 这里可以调用传入的函数指针进行计算// 示例:return p(a, b);
}int main() {int a = 0; // 第一个操作数int b = 0; // 第二个操作数char cal; // 用户输入的运算符string continueChoice; // 用户选择是否继续的标志// 使用 Lambda 表达式定义加法、减法、乘法和除法操作auto add = [](int a, int b)->int { return a + b; }; // 加法auto minu = [](int a, int b)->int { return a - b; }; // 减法auto mul = [](int a, int b)->int { return a * b; }; // 乘法auto diliv = [](int a, int b)->double { if (b == 0) { // 检查除数是否为零cout << "错误:除数不能为零!" << endl;return 0; // 返回 0 表示错误}return (double)a / b; // 返回浮点数结果};while (true) { // 无限循环,直到用户选择退出// 获取用户输入的两个数字cout << "请输入两个数:" << endl;cin >> a;cin >> b;// 获取用户输入的运算符cout << "请输入运算符 (+, -, *, /):" << endl;cin >> cal;// 根据用户输入的运算符执行相应的计算switch (cal) {case '+': // 加法cout << "结果: " << add(a, b) << endl; // 调用 Lambda 表达式的加法函数break;case '-': // 减法cout << "结果: " << minu(a, b) << endl; // 调用 Lambda 表达式的减法函数break;case '*': // 乘法cout << "结果: " << mul(a, b) << endl; // 调用 Lambda 表达式的乘法函数break;case '/': // 除法cout << "结果: " << diliv(a, b) << endl; // 调用 Lambda 表达式的除法函数break;default: // 无效运算符cout << "无效的运算符!" << endl;break;}// 询问用户是否继续计算cout << "是否继续计算?(y/n): ";cin >> continueChoice;// 如果用户输入的不是 'y' 或 'Y',则退出循环if (continueChoice != "y" && continueChoice != "Y") {break; // 退出循环}}cout << "程序已退出。" << endl; // 提示程序结束return 0; // 返回 0 表示程序正常结束
}
```

### **代码注释说明**

1. **函数定义部分**:
   - 被注释掉的函数(如 `add`, `min`, `mul`, `diliv`)是传统方式定义的函数。
   - 通过 Lambda 表达式重新实现了这些功能,使代码更加简洁。

2. **Lambda 表达式**:
   - Lambda 表达式是一种匿名函数,可以直接在需要的地方定义并使用。
   - 例如,`auto add = [](int a, int b)->int { return a + b; };` 定义了一个加法操作。

3. **主循环**:
   - 使用 `while (true)` 实现无限循环,直到用户选择退出。
   - 在每次循环中,获取用户输入的两个数字和运算符,并根据运算符执行相应的计算。

4. **错误处理**:
   - 在除法操作中,检查除数是否为零,避免程序崩溃。
   - 如果用户输入无效运算符,提示“无效的运算符!”。

5. **用户交互**:
   - 每次计算结束后,询问用户是否继续。
   - 如果用户输入 `n` 或 `N`,程序会退出循环并结束运行。

6. **退出机制**:
   - 通过 `break` 语句跳出循环,实现程序的优雅退出。

---

### **总结**

这段代码通过 Lambda 表达式简化了函数定义,并提供了清晰的用户交互逻辑。代码注释详细地解释了每个部分的功能,方便阅读和维护。如果你还有其他问题或需要进一步优化,请随时提问!

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

相关文章:

  • 深入理解 RUM(真实用户监控)与前端锚点的应用与实践
  • LLM自回归模型:在输入输出中构建关系图的隐式表达
  • Python自动化解决滑块验证码的最佳实践
  • Vue3 自定义指令完全指南
  • 拥有600+门店的宠物连锁医院,实现核心业务系统上云
  • 科技与商业动态简报
  • Linux内核参数调优(TCP BBR算法实践)
  • 文件传输过滤器绕过:Exe2Hex
  • Dapper的数据库操作备忘
  • STM32MPU开发之旅:从零开始构建嵌入式Linux镜像
  • 高职人工智能技术应用专业(计算机视觉方向)实训室解决方案
  • WordPress AI 原创文章自动生成插件 24小时全自动生成SEO原创文章 | 多语言支持 | 智能配图与排版
  • 本土网盟推广孟加拉slot游戏出海营销优势
  • CSS常遇到自适应高度动画、带三角气泡阴影一行样式解决
  • 鸿蒙NEXT开发剪贴板工具类(ArkTs)
  • 智慧医院建设的三大关键领域
  • [AI技术(二)]JSONRPC协议MCPRAGAgent
  • 【Linux篇】理解信号:如何通过信号让程序听从操作系统的指令
  • 二项式分布html实验
  • 在Android中如何使用Protobuf上传协议
  • 隧道调频广播覆盖的实现路径:隧道无线广播技术赋能行车安全升级,隧道汽车广播收音系统助力隧道安全管理升级
  • http://noi.openjudge.cn/——2.5基本算法之搜索——200:Solitaire
  • NVIDIA 高级辅助驾驶汽车安全系统 系列读后感(1)
  • 【C++】继承----下篇
  • 使用命令行加密混淆C#程序
  • MySQL表达式之公用表表达式(CTE)的使用示例
  • 海量信息处理分析有效决策
  • 反序列化漏洞1
  • RK3562/3588 系列之0—NPU基础概念
  • 链表系列一>两两交换链表中的结点