🧑🏻‍💻 博世

我的C++简易计算器

🇨🇳每日一言:

## 哲学的基本问题是思维和存在的关系问题。—— 哲学的基本问题

今天写了个c++简易计算器 记录如下:

#include <iostream>
        #include <limits> // 用于清理输入缓冲区所需的 numeric_limits
        
        using namespace std;
        
        // 定义菜单函数:封装显示逻辑,使主函数更简洁
        void menu() {
            
            cout << "\n===============" << endl;
            cout << "  C++ 计算器   " << endl;
            cout << "===============" << endl;
            cout << "1. 加法 (+)" << endl;
            cout << "2. 减法 (-)" << endl;
            cout << "3. 乘法 (*)" << endl;
            cout << "4. 除法 (/)" << endl;
            cout << "5. 退出程序 (exit)" << endl;
            cout << "请输入选择 (1-5): ";
        }
        
        int main() {
            // 变量声明
            int choice;          // 用于存储用户的菜单选项
            double num1, num2;   // 使用 double 以支持浮点数(小数)运算
            double result;       // 存储计算结果
        
            // 无限循环:除非用户主动选择退出,否则程序一直运行
            while (true) {
                menu();          // 调用函数显示菜单界面
                cin >> choice;   // 获取用户输入的选项序号
        
                // 退出逻辑判断
                if (choice == 5) {
                    cout << "感谢使用!程序退出" << endl;
                    break;       // 强制跳出 while 循环,结束程序
                }
        
                // 输入合法性检查:防止用户输入菜单以外的数字
                if (choice > 5 || choice < 1) {
                    cout << "输入错误,请重新输入" << endl;
                    continue;    // 跳过本次循环剩下的代码,直接回到开头重新显示菜单
                }
        
                // 获取运算数据
                cout << "请输入第一个数: ";
                cin >> num1;
                cout << "请输入第二个数: ";
                cin >> num2;
        
                // 根据用户的选择执行不同的数学逻辑
                switch (choice) {
                    case 1:
                        result = num1 + num2;
                        cout << num1 << " + " << num2 << " = " << result << endl;
                        break;
                    case 2:
                        result = num1 - num2;
                        cout << num1 << " - " << num2 << " = " << result << endl;
                        break;
                    case 3:
                        result = num1 * num2;
                        cout << num1 << " * " << num2 << " = " << result << endl;
                        break;
                    case 4:
                        // 除法特殊逻辑:检查除数是否为 0
                        // 使用 while 循环:如果用户一直输入 0,就一直卡在这里要求重新输入
                        while (num2 == 0) {
                            cout << "错误:除数不能为0!请重新输入第二个数: ";
                            cin >> num2;
                        }
                        result = num1 / num2;
                        cout << num1 << " / " << num2 << " = " << result << endl;
                        break;
                }
        
                // 提示等待
                cout << "\n计算完成! 按回车键继续..." << endl;
        
                /* * 重点难点:缓冲区清理 
                 * 当你输入数字并按回车时,'数字' 被 cin >> 拿走了,但 '回车符(\n)' 还留在内存里。
                 * 如果不清理,下面的 cin.get() 会直接读到那个旧的回车符,导致无法实现暂停效果。
                 */
                
                // 忽略缓冲区中所有的残留字符,直到遇到换行符为止
                cin.ignore(numeric_limits<streamsize>::max(), '\n');
                
                // 这一步才是真正的暂停,等待用户按下新的回车键
                cin.get();
            }
        
            return 0; // 程序正常结束
        }