从零开始的C++第三天:让计算器能持续战斗

发布时间:2026/9/13 18:25:35

从零开始的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/9/13 18:25:34

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

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

2026/9/13 6:10:19

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

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

2026/9/10 3:43:52

广东楼宇对讲系统

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

2026/9/13 0:01:16

拯救者Y7000黑屏故障排查与维修实战指南

1. 项目概述:一台黑屏的拯救者Y7000,到底卡在哪一步? 联想拯救者Y7000系列笔记本,从2018年第一代搭载i5-8300H开始,到后来的i7-9750H、i7-10750H、i5-11400H,再到2023年款的R7-7840HS,它始终是学…

2026/9/13 0:01:16

拯救者Y7000黑屏故障排查与维修实战指南

1. 项目概述:一台黑屏的拯救者Y7000,到底卡在哪一步? 联想拯救者Y7000系列笔记本,从2018年第一代搭载i5-8300H开始,到后来的i7-9750H、i7-10750H、i5-11400H,再到2023年款的R7-7840HS,它始终是学…

2026/9/12 6:29:36

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/12 14:32:17

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/13 11:18:28

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码