发布时间:2026/7/22 5:03:40
从零开始的C++第三天:让计算器能持续战斗 第二天我们写出了一个能做四则运算的计算器但它有个致命的弱点算完一次就退出了。如果我想连续算十道题就得重新打开十次程序。今天我们就来解决这个问题让计算器学会“循环工作”。 回顾与热身第二天结束时我们的计算器代码大概长这样cpp复制下载#include iostream #include Calculator.h using namespace std; int main() { double x 0.0, y 0.0; char oper ; cout Calculator Console Application endl endl; cout Please enter the operation to perform. Format: ab | a-b | a*b | a/b endl; cin x oper y; Calculator c; double result c.Calculate(x, oper, y); cout x oper y result endl; return 0; }这段代码的问题在于程序从上到下执行一遍就结束了。用户输入一次程序算一次然后退出。今天我们要学会用循环来打破这个限制。 第一部分认识C的三种循环在C中有三种方式可以让一段代码重复执行-6。根据使用场景选择最合适的那一种。1.for循环——“我知道要跑几圈”当你在循环开始前就知道要执行多少次时for循环是最直观的选择-6。cpp复制下载// 打印1到5 for (int i 1; i 5; i) { cout i ; } // 输出1 2 3 4 5它的结构分成三部分-6int i 1初始化在循环开始前执行一次i 5条件判断每次循环前检查为true就继续为false就退出i迭代更新每次循环体执行完后执行2.while循环——“只要条件满足我就一直跑”当你不确定要循环多少次但知道“什么时候该停下来”时用while-6-10。cpp复制下载int i 1; while (i 5) { cout i ; i; } // 输出1 2 3 4 5关键点如果条件一开始就是false循环体一次都不会执行-10。3.do-while循环——“先跑一圈再说然后再看条件”do-while和while的唯一区别是它至少会执行一次循环体然后再判断条件-6-3。cpp复制下载int i 6; do { cout i ; i; } while (i 5); // 输出6 条件为假但循环体已经执行了一次为什么计算器要用do-while因为用户打开计算器至少应该能算一次然后由用户决定是否继续。这正好符合do-while“先执行一次再根据条件决定是否继续”的特性-3。️ 第二部分改造计算器——让它能连续工作基于上面的分析我们用do-while来改造计算器。第一步让计算器“死了都要算”在main函数外面包一层do-while条件暂时写为true永远为真cpp复制下载#include iostream #include Calculator.h using namespace std; int main() { Calculator c; do { double x 0.0, y 0.0; char oper ; cout \n 计算器 endl; cout 请输入算式格式a b endl; cin x oper y; double result c.Calculate(x, oper, y); cout x oper y result endl; } while (true); // ⚠️ 这是个无限循环 return 0; }现在运行程序你会发现算完一次之后程序不会退出它会继续提示你输入下一道算式但问题来了——永远也退不出去除非按CtrlC强制关闭第二步加入退出机制我们需要给用户一个“退出”的选项。常见做法是用户输入某个特殊字符比如q时退出。但这里有个坑我们目前用cin x oper y一次性读取三个值如果要检测q就需要先读取一个字符串来判断。为了让改动最小化我们换一种交互方式先让用户选择操作1.计算 2.退出选择1后再输入算式cpp复制下载#include iostream #include Calculator.h using namespace std; int main() { Calculator c; int choice 0; do { cout \n 计算器 endl; cout 1. 进行计算 endl; cout 2. 退出程序 endl; cout 请选择输入数字; cin choice; if (choice 1) { double x 0.0, y 0.0; char oper ; cout 请输入算式格式a b; cin x oper y; double result c.Calculate(x, oper, y); cout x oper y result endl; } else if (choice 2) { cout 感谢使用再见 endl; break; // break会跳出当前循环 } else { cout 无效输入请重新选择 endl; } } while (true); // 循环条件为true但可以通过break跳出 return 0; } 新知识点break语句break的作用是立即退出当前循环不管循环条件是什么-6。当用户选择退出时我们执行break程序就会跳出do-while循环然后执行return 0结束程序。 第三部分顺手修复一个Bug——除数为0第二天我们埋了一个隐患如果用户输入5 / 0程序会崩溃因为数学上除以0没有意义。在Calculator.cpp的Calculate函数中加入除数为0的判断cpp复制下载#include Calculator.h double Calculator::Calculate(double x, char oper, double y) { switch(oper) { case : return x y; case -: return x - y; case *: return x * y; case /: if (y 0.0) { cout ❌ 错误除数不能为0 endl; return 0.0; } return x / y; default: cout ❌ 错误不支持的运算符 endl; return 0.0; } }⚠️注意这个版本我们在.cpp文件中直接使用了cout所以需要在Calculator.cpp顶部加上#include iostream和using namespace std;。 第三天知识点地图知识点作用关键代码for循环确定次数的循环for (int i0; i10; i) { ... }while循环条件驱动的循环while (条件) { ... }do-while循环至少执行一次的循环do { ... } while (条件);break语句立即退出循环break;错误处理防止程序崩溃除数为0时返回错误信息 今天的完整代码Calculator.hcpp复制下载#pragma once class Calculator { public: double Calculate(double x, char oper, double y); };Calculator.cppcpp复制下载#include Calculator.h #include iostream using namespace std; double Calculator::Calculate(double x, char oper, double y) { switch(oper) { case : return x y; case -: return x - y; case *: return x * y; case /: if (y 0.0) { cout ❌ 错误除数不能为0 endl; return 0.0; } return x / y; default: cout ❌ 错误不支持的运算符 endl; return 0.0; } }CalculatorTutorial.cpp主程序cpp复制下载#include iostream #include Calculator.h using namespace std; int main() { Calculator c; int choice 0; do { cout \n 计算器 endl; cout 1. 进行计算 endl; cout 2. 退出程序 endl; cout 请选择输入数字; cin choice; if (choice 1) { double x 0.0, y 0.0; char oper ; cout 请输入算式格式a b; cin x oper y; double result c.Calculate(x, oper, y); // 只有result不是错误情况时才输出 if (!(oper / y 0.0) oper ! oper ! - oper ! * oper ! /) { // 正常输出交给Calculate内部处理 } // 更优雅的方式让Calculate返回一个状态码但我们选择简单处理 cout x oper y result endl; } else if (choice 2) { cout 感谢使用再见 endl; break; } else { cout 无效输入请重新选择 endl; } } while (true); return 0; } 明天的预告今天我们用do-while让计算器能持续工作用break让用户能主动退出还顺手修复了除数为0的Bug。但现在的计算器还有一个不方便的地方每次都要重新选择“1.计算”。明天我们将学习函数的概念把“输入算式、计算结果、显示输出”这一整套流程封装到一个函数里让代码更整洁、更容易维护。三天时间从“Hello World”到能持续战斗的计算器你已经掌握了C中最核心的几个概念变量、分支switch、循环do-while和类。继续保持这个节奏

相关新闻

2026/7/22 5:03:40

x86汇编CALL与RET指令详解及模块化编程实践

1. 汇编语言中的CALL与RET指令解析在x86汇编语言中,CALL和RET这对黄金搭档构成了模块化程序设计的基石。作为有十年嵌入式开发经验的老兵,我见过太多新手在这两个指令上栽跟头——要么堆栈失衡导致程序崩溃,要么返回地址计算错误跳转到未知区…

2026/7/22 5:03:40

小狼刹那:事件驱动架构在分布式任务调度中的实践应用

最近在技术社区中,一个名为"小狼刹那在此,还不跪下!"的项目引起了广泛关注。这个看似中二的项目名称背后,实际上是一个功能强大的技术工具或框架。很多开发者第一眼看到这个标题可能会感到困惑——这到底是一个游戏模组…

2026/7/22 5:03:40

广东楼宇对讲系统

在现代社会,随着科技的不断进步和人们对生活质量要求的提高,楼宇对讲系统已经成为许多住宅小区不可或缺的一部分。特别是在广东这样的经济发达地区,楼宇对讲系统的应用更是广泛。本文将通过具体的数据和案例,探讨楼宇对讲系统的重…

2026/7/22 6:18:43

新能源汽车核心控制模块解析与工程实践

1. 新能源汽车控制模块概述作为一名在汽车电子行业摸爬滚打十年的工程师,我深刻体会到新能源汽车的控制系统就像人体的神经系统——遍布全身的电子控制单元(ECU)通过复杂的网络协同工作。与传统燃油车相比,新能源车的控制模块数量…

2026/7/22 6:18:43

大模型产品经理转型:从确定性思维到AI思维

1. 从普通产品经理到大模型产品经理的转型全景图去年夏天,我帮团队面试了37位想转型大模型的产品经理,发现一个有趣现象:90%的候选人还在用移动互联网时代的产品方法论来应对AI时代的挑战。这就像拿着弓箭上现代战场——不是勇气可嘉&#xf…

2026/7/22 6:18:43

Python批量图片水印工具开发实战

1. 项目概述:Python图片批量水印工具开发实录去年接手公司宣传部门需求时,他们每周需要处理近千张产品图添加统一版权标识。手工操作不仅效率低下,还常出现漏打、位置偏差等问题。这个用Python实现的批量水印工具最终将处理时间从8小时压缩到…

2026/7/22 6:18:43

AI辅助论文写作工具评测与职称论文撰写技巧

1. 为什么我们需要AI辅助论文写作?对于广大需要评职称的专业人士来说,论文写作一直是个令人头疼的问题。白天要完成繁重的本职工作,晚上还要挤出时间查阅文献、构思框架、撰写内容,这种高强度的工作状态往往持续数月。更令人焦虑的…

2026/7/22 6:18:43

SpringBoot异步事件总线原理与实践指南

1. 为什么需要异步事件总线?在传统的SpringBoot应用中,业务逻辑通常是同步执行的。比如用户注册成功后需要发送邮件、更新统计信息、推送通知等操作,代码往往会写成这样:public void register(User user) {// 1. 保存用户userRepo…

2026/7/22 6:13:43

支持向量机SVM原理与实践:从分类到回归

1. 支持向量机SVM:机器学习中的分类利器第一次接触支持向量机(SVM)是在研究生阶段的模式识别课上。当时教授在黑板上画了几个数据点,然后问:"如何找到一条最优的分界线?"这个问题困扰了我整整一周,直到真正理…

2026/7/20 6:33:00

Unity与Python本地通信:基于Flask的跨语言数据交换实战

1. 项目概述:为什么我们需要一个本地通信服务器?在游戏开发、数字孪生、仿真训练等众多领域,Unity作为强大的实时3D内容创作平台,其核心逻辑通常由C#驱动。然而,当我们需要进行复杂的数据分析、机器学习推理、科学计算…

2026/7/22 0:02:17

抓包代理链路下的 TLS 指纹变化分析 TLSFOWARD抓包工具

抓包代理链路下的 TLS 指纹变化分析:为什么调试环境会影响访问结果 摘要 在网页调试、接口联调、自动化巡检和授权采集排查中,抓包是常见手段。但很多开发者会遇到一个现象:正常访问页面时没有问题,一进入抓包或代理调试环境&…

2026/7/22 0:02:17

微信QQ聊天记录误删恢复与备份方案全指南

1. 聊天记录误删的常见场景与恢复思路作为一名长期关注数据安全的技术博主,我处理过上百起聊天记录误删的求助案例。手机误操作、系统升级失败、设备损坏是三大常见诱因。上周就遇到用户更新微信时断电,导致近两年的工作群聊记录全部消失的极端案例。不同…

2026/7/22 0:02:17

2026最新8款个人AI编程免费工具深度实测

作为一名全栈独立开发者,我最近半年一直在折腾副业项目,每个月在AI编程工具上的订阅费算下来其实也不算便宜。作为个人开发者,我们追求的就是用最少的成本获得最高效的开发体验。TRAE 基础版免费,字节跳动出品的国内首款 AI 原生 …

2026/7/21 20:02:44

3个高效策略:快速掌握Axure中文界面配置

3个高效策略:快速掌握Axure中文界面配置 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 还在为Axure RP的英文界面感…