C++ 第一阶段项目一:实现简易计算器
·
目录
一、项目目标
实现一个命令行简易计算器,支持以下功能:
- 四则运算(加、减、乘、除)
- 用户交互(输入操作数和操作符)
- 错误处理(除零错误、无效输入)
- 循环运行(用户可选择继续或退出)
二、功能需求
1. 基本功能
- 用户输入两个数字和一个运算符(
+,-,*,/) - 程序计算结果并输出
- 支持连续计算(用户可选择是否继续)
2. 扩展功能(选做)
- 输入验证(防止非数字输入)
- 支持更多运算(如幂运算
^、取模%) - 使用函数封装逻辑
三、实现思路
1. 主程序流程图
开始
↓
显示菜单
↓
获取用户输入(操作数1、操作符、操作数2)
↓
执行计算
↓
显示结果
↓
询问是否继续
↓
结束 or 循环
2. 关键步骤
- 输入处理:使用
cin获取用户输入,注意处理输入错误。 - 错误检查:检查除零错误和无效操作符。
- 循环控制:使用
do-while循环保持程序运行。
四、代码实现
#include <iostream>
#include <limits> // 用于输入验证
using namespace std;
// 函数声明
void displayMenu();
double getNumber(const string& prompt);
char getOperator();
void calculate(double num1, char op, double num2);
bool confirmContinue();
int main() {
char choice = 'y';
do {
displayMenu();
double num1 = getNumber("请输入第一个数字: ");
char op = getOperator();
double num2 = getNumber("请输入第二个数字: ");
calculate(num1, op, num2);
choice = confirmContinue();
} while (choice == 'y' || choice == 'Y');
cout << "感谢使用!再见!" << endl;
return 0;
}
// 显示菜单
void displayMenu() {
cout << "简易计算器\n";
cout << "支持的运算符: +, -, *, /\n";
}
// 获取数字(带输入验证)
double getNumber(const string& prompt) {
double num;
while (true) {
cout << prompt;
if (cin >> num) {
break;
} else {
cin.clear(); // 清除错误标志
cin.ignore(numeric_limits<streamsize>::max(), '\n'); // 忽略无效输入
cout << "输入错误!请输入一个数字。\n";
}
}
return num;
}
// 获取操作符
char getOperator() {
char op;
while (true) {
cout << "请输入操作符 (+, -, *, /): ";
cin >> op;
if (op == '+' || op == '-' || op == '*' || op == '/') {
break;
} else {
cout << "无效的操作符!请重新输入。\n";
}
}
return op;
}
// 执行计算
void calculate(double num1, char op, double num2) {
try {
switch (op) {
case '+':
cout << "结果: " << num1 + num2 << endl;
break;
case '-':
cout << "结果: " << num1 - num2 << endl;
break;
case '*':
cout << "结果: " << num1 * num2 << endl;
break;
case '/':
if (num2 == 0) {
throw runtime_error("除数不能为零!");
}
cout << "结果: " << num1 / num2 << endl;
break;
default:
cout << "未知错误!" << endl;
}
} catch (const exception& e) {
cerr << "错误: " << e.what() << endl;
}
}
// 确认是否继续
bool confirmContinue() {
char ch;
while (true) {
cout << "是否继续计算?(y/n): ";
cin >> ch;
if (ch == 'y' || ch == 'Y' || ch == 'n' || ch == 'N') {
return (ch == 'y' || ch == 'Y');
} else {
cout << "请输入 y 或 n。\n";
}
}
}
五、代码说明
1. 输入验证
- 使用
cin.fail()检测输入错误。 - 使用
cin.clear()和cin.ignore()清理输入流。
2. 异常处理
- 使用
try-catch捕获除零错误。 - 抛出
runtime_error提供错误信息。
3. 模块化设计
- 将功能拆分为独立函数,提高代码可读性和复用性。
六、运行示例
简易计算器
支持的运算符: +, -, *, /
请输入第一个数字: 10
请输入操作符 (+, -, *, /): *
请输入第二个数字: 5
结果: 50
是否继续计算?(y/n): y
请输入第一个数字: 20
请输入操作符 (+, -, *, /): /
请输入第二个数字: 0
错误: 除数不能为零!
是否继续计算?(y/n): n
感谢使用!再见!
七、扩展建议
-
添加更多运算:
case '^': // 幂运算 cout << "结果: " << pow(num1, num2) << endl; break; -
使用函数指针或 Lambda 表达式:
using Operation = double (*)(double, double); map<char, Operation> operations = { {'+', [](double a, double b) { return a + b; }}, {'-', [](double a, double b) { return a - b; }} }; -
面向对象设计:
class Calculator { public: void run(); private: double add(double a, double b); double subtract(double a, double b); };
八、总结
通过本项目,你将掌握:
- 基本输入输出和用户交互
- 条件判断与循环控制
- 函数的封装与调用
- 异常处理和输入验证
- 模块化编程思想
这是一个非常适合 C++ 初学者的实践项目,建议多调试并尝试扩展功能!
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)