BOSh
文章81
标签26
分类5

一言

文章归档

我的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
92
#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; // 程序正常结束
}

本文作者:BOSh
本文链接:http://bosh.zz.ac/posts/3718073393.html
版权声明:本文由BoSh发布,部分内容来源于网络。