C++计算器程序while循环中home()函数调用异常求助
问题解决:C++计算器程序停止重复调用home()函数
问题分析
你当前的代码逻辑存在两处问题:
while循环每次迭代开头都会无条件调用home(),导致即便第二次输入正确,进入循环时仍会先执行一次home();- 之前在
else分支中调用home()的做法,会造成输入错误时重复显示选项(循环开头一次,else分支一次)。
你的核心需求是:输入正确时立即停止调用home(),仅在输入错误时重新展示运算选项。
修正方案
调整home()的调用时机:仅在程序启动时显示一次初始选项,以及输入错误后重新显示选项,移除循环开头的无条件调用。同时可以优化输入判断逻辑,减少重复代码。
修改后的完整代码
#include <iostream> #include <cctype> // 用于toupper()函数 using namespace std; void home() { cout << "\nChoose your operation:" << endl; cout << "\tType [A] for Addition" << endl; cout << "\tType [S] for Subtraction" << endl; cout << "\tType [M] for Multiplication" << endl; cout << "\tType [D] for Division" << endl; } int main() { char operation; bool no_operator = true; int design = 73; for (int i = 0; i < design; i++){ if (i == 25){ cout << " WELCOME TO CALCULATOR "; i += 22; } else i == 72 ? cout << "*\n" : cout << "*"; } // 初始显示一次运算选项 home(); while (no_operator){ cout << "\nOperation: "; cin >> operation; // 统一转换为大写,简化大小写判断逻辑 operation = toupper(operation); if (operation == 'A') { cout << "\nIt will going to add numbers"; no_operator = false; } else if (operation == 'S') { no_operator = false; cout << "\nIt will going to subtract numbers"; } else if (operation == 'M') { no_operator = false; cout << "\nIt will going to multiply numbers"; } else if (operation == 'D') { no_operator = false; cout << "\nIt will going to divide numbers"; } else { cout << "\tInvalid Input: You must enter A/S/M/D only\n"; // 仅输入错误时重新显示选项 home(); } } return 0; }
关键修改说明
- 将
home()的初始调用移到while循环外,确保程序启动只显示一次选项; - 移除
while循环开头的home()调用,避免输入正确前的多余显示; - 仅在
else分支(输入错误场景)调用home(),重新展示选项; - 使用
toupper()统一转换输入字符为大写,消除重复的大小写判断逻辑(需引入<cctype>头文件)。
修改后,当输入正确时会直接设置no_operator = false退出循环,不会再调用home(),完全符合你的需求。
内容的提问来源于stack exchange,提问作者Joseph Tiglao
相关产品推荐
相关产品推荐

