如何让C++程序持续运行直到用户输入stop指令终止
实现方案
你的现有代码是单次运行逻辑,要实现持续运行直到输入特定命令退出,同时修复原代码里的计算、逻辑问题,可以按以下方式调整:
- 核心计算逻辑放入无限循环,程序启动后一直等待输入,仅当用户在金额输入位输入
stop时跳出循环退出,全程不会在单次计算后询问是否续跑 - 增加输入状态检测:因为金额默认按数值读取,当用户输入非数字的命令内容时,先清空输入流错误标记,读取字符串判断是否为退出指令,避免输入非数字导致程序崩溃或死循环
- 同步修复原代码存在的几个明显问题:数值类型用
int丢失小数精度、税费计算逻辑错误、存在无意义的冗余输出、system("pause")写在return 0之后永远无法执行、输出文案拼写错误。
修改后完整代码
#include <iostream> #include <cmath> #include <string> #include <limits> using namespace std; int main() { // 启动时打印一次程序头部 cout << "\n\t**************************************************************\n"; cout << "\t\t D i s c o u n t & T a x C a l c u l a t o r\n"; cout << "\t**************************************************************\n"; cout << "提示:金额输入位输入stop可直接退出程序\n\n"; double bill, discount; while (true) { cout << "Enter the Amount $"; // 检测金额输入,若读取数值失败说明用户输入了非数字内容 if (!(cin >> bill)) { string cmd; cin.clear(); // 重置输入流错误状态 cin >> cmd; if (cmd == "stop") { // 匹配退出命令,直接跳出循环 break; } // 输入其他无效内容时提示后清空缓冲区,重新进入输入流程 cout << "输入无效,请输入合法金额数值,或输入stop退出\n"; cin.ignore(numeric_limits<streamsize>::max(), '\n'); continue; } cout << "Enter the Discount(%) "; cin >> discount; // 计算折扣后价格 double discountedPrice = bill - (bill * discount / 100); // 按8.875%税率计算含税总价 double totalBill = discountedPrice * (1 + 8.875 / 100); cout << "Your discounted price is $" << round(discountedPrice * 100) / 100 << endl; cout << "Your Total Bill (with 8.875% tax) is $" << round(totalBill * 100) / 100 << endl; cout << "\n\t**************************************************************\n"; cout << "\t\t C a l c u l a t i o n D o n e\n"; cout << "\t**************************************************************\n\n"; } // 退出时打印结束语并暂停 cout << "\n\t**************************************************************\n"; cout << "\t\t T H A N K Y O U\n"; cout << "\t**************************************************************\n"; system("pause"); return 0; }
关键说明
- 程序启动后会持续等待用户输入金额、折扣,计算完成后自动回到下一轮金额输入,没有额外的“是否继续”确认步骤
- 目前退出命令设置为
stop,如果需要自定义其他退出关键词,直接修改判断条件里的字符串即可 - 变量改为
double类型支持小数金额、小数折扣输入,计算结果自动保留两位小数,符合日常金额计算的精度要求 - 输入非数字内容不会导致程序卡死,会提示用户重新输入
内容的提问来源于stack exchange,提问作者Anmol Talwar
相关产品推荐
相关产品推荐

