C++如何基于用户yes/no输入终止程序 附入门代码求优化建议
问题背景
- 刚完成"Hello World"练习,正式开启C++编程学习
- 已写出第一份C++功能代码,需要新增yes/no交互选项:用户选择对应选项即可终止程序运行
- 同时希望得到代码相关的优化反馈
原有实现代码
#include <iostream> using namespace std; void Welcome(); void calculateNum(); void tryAgain(); int main() { Welcome(); while (true) { calculateNum(); tryAgain(); } system("pause"); } void calculateNum() { float userNumber; cin >> userNumber; for (int i = 100; i >= 1; i--) { float cNumber = i* userNumber; cout << i << " >>>>> " << cNumber << endl; } } void Welcome() { cout << "Welcome \n Enter a number to see the first 100 multiples \n"; } void tryAgain() { cout << "Try again? Enter another number... "; }
修改方案&优化点
- 补全
tryAgain()的核心逻辑:原函数只打印了提示文字,既没有读取用户输入,也没有控制循环流程,把它改成返回bool类型的函数,明确提示用户输入yes/no做选择,读取到y/yes时返回true让程序继续运行,读取到n/no时返回false终止循环即可。 - 增加基础输入容错:原代码没有处理用户输错内容的情况,比如输入字母而不是数字时,
cin会进入错误状态,后续所有输入读取都会失效导致程序死循环。加个简单的输入判断,出错时清空错误状态、把缓冲区里的非法内容清掉,就能避免这个问题。 - 关于
using namespace std;:初学阶段用完全没问题,能少敲很多代码,只是如果以后写规模大一点的项目,最好养成显式加std::前缀的习惯,避免不同库的同名命名冲突,现在初学不用纠结这个。 - 关于
system("pause"):这是Windows系统独有的命令,在Linux/Mac上跑会报错,如果想让程序结束前停一下等用户操作,用标准库的输入接口实现就行,不依赖特定系统。 - 调整循环结构:原代码用
while(true)写死循环,现在直接用tryAgain()的返回值控制循环条件就行,逻辑更清晰。
修改后可直接运行的完整代码
#include <iostream> #include <string> #include <limits> #include <cctype> void Welcome(); void calculateNum(); bool tryAgain(); int main() { Welcome(); do { calculateNum(); } while (tryAgain()); // 替换跨平台兼容性差的system("pause") std::cout << "程序已退出,按回车键关闭窗口..."; std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); std::cin.get(); return 0; } void calculateNum() { float userNumber; std::cout << "请输入一个数字:"; // 输入校验,避免非法输入导致程序死循环 while (!(std::cin >> userNumber)) { std::cout << "输入无效,请输入合法数字:"; std::cin.clear(); // 清空cin错误标志位 std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); // 清空缓冲区非法内容 } for (int i = 100; i >= 1; i--) { float cNumber = i * userNumber; std::cout << i << " >>>>> " << cNumber << '\n'; } } void Welcome() { std::cout << "欢迎使用\n输入一个数字,即可查看它从1倍到100倍的计算结果\n"; } bool tryAgain() { std::string choice; std::cout << "\n是否继续使用?请输入yes/no(或y/n):"; std::cin >> choice; // 统一转小写,兼容用户大小写混合输入的情况 for (char& c : choice) { c = tolower(c); } return (choice == "y" || choice == "yes"); }
内容的提问来源于stack exchange,提问作者DrRumsmuggler
相关产品推荐
相关产品推荐

