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