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.mzph.cn/bicheng/78858.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SecureCRT配置端口转发-通过跳板机SSH到其他服务器

在项目开发中遇到这样一个问题&#xff0c;客户服务器有一台操作系统的CentOS JAVA服务器和MySQL服务器&#xff0c;本地电脑通过VPN SSH到这2台服务器进行日常维护。最近因为修改了远程Mysql服务器导致重启时连不上Mysql服务器了。但是JAVA服务器可以SSH到Mysql服务器。通过各…

vue3使其另一台服务器上的x.html,实现x.html调用中的函数,并向其传递数据。

vue3例子 <template><div><iframeload"loadIFreamSite"id"loadIframeSite":src"iframeSrc1"frameborder"0"scrolling"no"allowtransparency"true"style"width: 100%"></iframe&g…

JQ6500语音模块详解(STM32)

目录 一、介绍 二、传感器原理 1.原理图 2.引脚描述 三、程序设计 main文件 usart.h文件 usart.c文件 四、实验效果 五、资料获取 项目分享 一、介绍 JQ6500是一种支持串口驱动的语音模块&#xff0c;提供串口的MP3芯片&#xff0c;集成了MP3、WMV的硬解码。同时软…

如何让自己的博客可以在百度、谷歌、360上搜索到(让自己写的CSDN博客可以有更多的人看到)

发现自己写的博客文章名复制&#xff0c;然后粘贴到百度进行搜索&#xff0c;发现搜索不到自己的&#xff0c;但是会显示其他人的CSDN博客。于是查找相关资料&#xff0c;整理出以下搜索引擎资源收录入口&#xff0c;把自己的文章链接输入进去&#xff0c;然后经过审核通过后&a…

1. 用户之窗

前端开发简介 1. 什么是前端&#xff1f; 前端开发&#xff08;Front-End Development&#xff09;是构建网站或应用 用户直接交互界面 的技术领域&#xff0c;涵盖&#xff1a; 视觉呈现 &#xff08;布局、色彩、动画&#xff09;交互逻辑 &#xff08;点击、滚动、表单&a…

无过拟合的记忆:分析大语言模型的训练动态

Kushal Tirumala⇤ Aram H. Markosyan⇤ Luke Zettlemoyer Armen Aghajanyan Meta AI 研究 {ktirumala,amarkos,lsz,armenag}fb.com 原文链接&#xff1a;[2210.09262] Physics-Driven Convolutional Autoencoder Approach for CFD Data Compressions 摘要 尽管超大语言模型…

黑马Redis(三)黑马点评项目

优惠卷秒杀 一、全局唯一ID 基于Redis实现全局唯一ID的策略&#xff1a; Component RequiredArgsConstructor public class RedisIdWorker {private static final Long BEGIN_TIMESTAMP1713916800L;private static final int COUNT_BITS 32;Resourceprivate final StringRed…

flume----初步安装与配置

目录标题 **flume的简单介绍**⭐flume的**核心组件**⭐**核心特点** **安装部署**1&#xff09;**解压安装包**2&#xff09;**修改名字** **&#xff08;配置文件时&#xff0c;更方便&#xff09;****3&#xff09;⭐⭐配置文件**4&#xff09;**兼容Hadoop**5&#xff09;**…

深度整合Perforce P4+Jira+Confluence:游戏开发团队协作工具链搭建指南

现场对话 游戏开发团队最头疼的版本管理问题是什么&#xff1f; SVN宕机&#xff1f; Git仓库爆炸&#xff1f; 还是美术资源管理一团乱&#xff1f; 在4月11-12日的GGS 2025全球游戏峰会上&#xff0c;Perforce中国授权合作伙伴-龙智的销售和技术支持团队&#xff0c;与行业…

k8s基本概念-YAML

YAML介绍 YAML是“YAML Aint a Markup Language” (YAML不是一种置标语言)的递归缩进写,早先YAML的意思其实是:“Yet Another Markup Language”(另一种置标语言) YAML是一个类似XML、JSON的标记性语言。YAML强调以数据为中心,并不是以标识语言为重点。因而YAML本身的定义…

ECharts散点图-散点图20,附视频讲解与代码下载

引言&#xff1a; ECharts散点图是一种常见的数据可视化图表类型&#xff0c;它通过在二维坐标系或其它坐标系中绘制散乱的点来展示数据之间的关系。本文将详细介绍如何使用ECharts库实现一个散点图&#xff0c;包括图表效果预览、视频讲解及代码下载&#xff0c;让你轻松掌握…

Infrared Finance:Berachain 生态的流动性支柱

在加密市场中&#xff0c;用户除了参与一级和二级交易&#xff0c;还有一种低门槛参与的就是空投。从 2021 年 DeFi 成为主流开始&#xff0c;空投一直都是“以小搏大”的机会&#xff0c;通过参与项目早期的链上交互和任务以获取空投奖励&#xff0c;近几年已成为一种广受欢迎…

附1:深度解读:《金融数据安全 数据安全分级指南》——数据分类的艺术专栏系列

文章目录 一、文件背景与意义1.1 文件背景1.2 文件意义 二、文件结构与核心内容2.1 文件结构概述2.2 核心内容解析2.2.1 范围与适用对象2.2.2 数据安全定级目标与原则2.2.3 数据安全定级要素2.2.4 要素识别2.2.5 数据安全级别划分 三、定级方法与流程3.1 定级流程3.2 级别变更机…

vue mixin混入与hook

mixin混入是 ‌选项式 API‌&#xff0c;在vue3-Composition API <script setup> 中无法直接使用&#xff0c;需通过 setup() 函数转换 vue2、vue3选项式API: // mixins/mixin.js export const mixin {methods: {courseType(courseLevel) {const levelMap {1: 初级,…

Excel如何安装使用EPM插件并且汉化?

Excel如何使用EPM插件 Excel如何使用EPM插件一、安装EPM插件二、启动EPM插件三、插件汉化设置 Excel如何使用EPM插件 一、安装EPM插件 在安装EPM插件时&#xff0c;若运行安装包后出现报错提示&#xff0c;通常是因为系统缺少 Visual Studio 2010 组件&#xff0c;需先安装该…

vue3-springboot-mysql的docker部署

Docker配置原理与部署文档 概述 本文档详细说明RuoYi-Vue与BladeX集成项目的Docker部署原理&#xff0c;包括配置文件的作用、相互关系及数据流动。通过三个核心配置文件&#xff08;docker-compose.yml、Dockerfile和docker-entrypoint.sh&#xff09;&#xff0c;实现了应用…

第十二天 使用Unity Test Framework进行自动化测试 性能优化:Profiler分析、内存管理

前言 在完成游戏核心功能开发后,如何确保项目质量并成功发布到各大平台?本文将从自动化测试到商店上架,手把手教你构建完整的游戏开发闭环。使用Unity 2022 LTS版本进行演示,所有代码均经过实际项目验证。 一、自动化测试实战(Unity Test Framework) 1.1 测试框架搭建 …

【专题四】前缀和(3)

&#x1f4dd;前言说明&#xff1a; 本专栏主要记录本人的基础算法学习以及LeetCode刷题记录&#xff0c;按专题划分每题主要记录&#xff1a;&#xff08;1&#xff09;本人解法 本人屎山代码&#xff1b;&#xff08;2&#xff09;优质解法 优质代码&#xff1b;&#xff…

深度解析:TextRenderManager——Cocos Creator艺术字体渲染核心类

一、类概述 TextRenderManager 是 Cocos Creator 中实现动态艺术字体渲染的核心单例类。它通过整合资源加载、缓存管理、异步队列和自动布局等功能&#xff0c;支持普通字符模式和图集模式两种渲染方案&#xff0c;适用于游戏中的动态文本&#xff08;如聊天内容、排行榜&…

【漫话机器学习系列】229.特征缩放对梯度下降的影响(The Effect Of Feature Scaling Gradient Descent)

特征缩放对梯度下降的影响&#xff1a;为什么特征标准化如此重要&#xff1f; 在机器学习和深度学习中&#xff0c;梯度下降是最常用的优化算法之一。然而&#xff0c;很多人在训练模型时会遇到收敛速度慢、训练不稳定的问题&#xff0c;其中一个重要原因就是特征未进行适当的…