Featured image of post 我的C++简易计算器

我的C++简易计算器

🇨🇳每日一言:

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


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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#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; // 程序正常结束
}
热爱生活 学无止境
使用 Hugo 构建
主题 StackJimmy 设计