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