从零开始的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和类。继续保持这个节奏

相关新闻

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

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

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

2026/7/29 8:44:37 阅读更多 →
小狼刹那:事件驱动架构在分布式任务调度中的实践应用

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

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

2026/7/30 5:29:25 阅读更多 →
广东楼宇对讲系统

广东楼宇对讲系统

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

2026/7/29 12:37:34 阅读更多 →

最新新闻

OpenClaw开源AI智能体开发框架入门指南

OpenClaw开源AI智能体开发框架入门指南

1. 项目概述:OpenClaw与AI智能体初探OpenClaw作为一款开源的AI智能体开发框架,正在技术社区掀起一股"平民化AI开发"的热潮。这个项目最吸引人的特点是它打破了传统AI开发的高门槛——不需要深厚的机器学习背景,也不用配置复杂的GPU…

2026/7/30 17:25:27 阅读更多 →
2026 待办事项软件排行测评,上班族跨端清单工具横向对比

2026 待办事项软件排行测评,上班族跨端清单工具横向对比

前言:跨端任务管理,是上班族降低工作失误的核心抓手2026 年职场效率行业调研数据显示,需要电脑、手机交替办公的上班族,平均每月都会出现 2 至 4 次任务遗忘、工作节点延误问题。究其原因,大多是待办内容只能保存在单一…

2026/7/30 17:25:27 阅读更多 →
AI 帮我管广告,安全吗?MCP 的安全机制与权限说明

AI 帮我管广告,安全吗?MCP 的安全机制与权限说明

优麦云MCP管理亚马逊广告安全吗?本文解析查询/诊断/执行三层能力模型,详解用户确认机制、官方SP-API通道和后台操作日志三大安全机制,并给出从只读试运行到保护x-api-key的六条实操清单,帮助卖家在不失去控制权的前提下用AI高效诊…

2026/7/30 17:25:27 阅读更多 →
告别枯燥刷本!AhabAssistantLimbusCompany自动化助手让你轻松玩转边狱巴士

告别枯燥刷本!AhabAssistantLimbusCompany自动化助手让你轻松玩转边狱巴士

告别枯燥刷本!AhabAssistantLimbusCompany自动化助手让你轻松玩转边狱巴士 【免费下载链接】AhabAssistantLimbusCompany AALC,PC端Limbus Company小助手。AALC,Limbus Company Assistant on PC 项目地址: https://gitcode.com/gh_mirrors/…

2026/7/30 17:25:27 阅读更多 →
awx-on-k3s排错宝典:Pod状态异常与日志分析实战指南

awx-on-k3s排错宝典:Pod状态异常与日志分析实战指南

awx-on-k3s排错宝典:Pod状态异常与日志分析实战指南 【免费下载链接】awx-on-k3s An example implementation of AWX on single node K3s using AWX Operator, with easy-to-use simplified configuration with ownership of data and passwords. 项目地址: https…

2026/7/30 17:25:27 阅读更多 →
提示词扩写不是堆砌文字!真正专业的扩写=语义保真×意图强化×上下文锚定(2024企业级实测数据支撑)

提示词扩写不是堆砌文字!真正专业的扩写=语义保真×意图强化×上下文锚定(2024企业级实测数据支撑)

更多请点击: https://kaifayun.com 第一章:提示词扩写不是堆砌文字!真正专业的扩写语义保真意图强化上下文锚定(2024企业级实测数据支撑) 在2024年覆盖金融、医疗与政务三大垂直领域的17家头部企业的A/B测试中&#x…

2026/7/30 17:24:27 阅读更多 →

日新闻

Windows驱动存储终极清理工具:DriverStoreExplorer完全指南

Windows驱动存储终极清理工具:DriverStoreExplorer完全指南

Windows驱动存储终极清理工具:DriverStoreExplorer完全指南 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 您是否曾因Windows系统盘空间不足而烦恼?是否遇到过设…

2026/7/30 0:00:13 阅读更多 →
如何3步掌握Video Download Helper:网页视频下载的完整实战指南

如何3步掌握Video Download Helper:网页视频下载的完整实战指南

如何3步掌握Video Download Helper:网页视频下载的完整实战指南 【免费下载链接】VideoDownloadHelper Chrome Extension to Help Download Video for Some Video Sites. 项目地址: https://gitcode.com/gh_mirrors/vi/VideoDownloadHelper 你是否曾经在浏览…

2026/7/30 0:00:13 阅读更多 →
“双减”后首个AI备课压力测试报告:覆盖32所中小学的176节AI辅助课,暴露4大隐性增负节点

“双减”后首个AI备课压力测试报告:覆盖32所中小学的176节AI辅助课,暴露4大隐性增负节点

更多请点击: https://intelliparadigm.com 第一章:AI 教师备课辅助 AI 教师备课辅助系统正逐步成为教育数字化转型的核心支撑工具,它并非替代教师,而是通过语义理解、知识图谱与多模态生成能力,将教师从重复性劳动中解…

2026/7/30 0:00:13 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/29 22:18:20 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/29 14:34:28 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/29 15:00:03 阅读更多 →

月新闻