AC AC
2025-12-30 15:59:57
发布于:浙江
1阅读
0回复
0点赞
//需求:封装加法、减法、乘法、除法、取模五个函数,主函数中接收用户输入的两个数和运算符(+、-、*、/、%),调用对应函数计算并输出结果,要求处理除数为 0、运算符非法等异常情况。
#include <iostream>
#include <iomanip>
#include <limits> // 用于处理输入流错误
using namespace std;
// 加法函数
double add(double a, double b) {
return a + b;
}
// 减法函数
double subtract(double a, double b) {
return a - b;
}
// 乘法函数
double multiply(double a, double b) {
return a * b;
}
// 除法函数
double divide(double a, double b) {
return a / b;
}
// 【关键修复】重命名取模函数,避免和std::modulus冲突
int mod(int a, int b) {
return a % b;
}
// 清空输入缓冲区(处理非法输入)
void clearInputBuffer() {
cin.clear(); // 重置输入流状态
cin.ignore(numeric_limits<streamsize>::max(), '\n'); // 忽略缓冲区所有字符
}
int main() {
double num1, num2;
char op;
bool isError = false;
double result = 0.0;
// 输入第一个数(校验是否为合法数字)
cout << "请输入第一个数:";
while (!(cin >> num1)) {
cout << "输入错误!请输入有效的数字:";
clearInputBuffer();
}
// 输入运算符
cout << "请输入运算符(+、-、*、/、%):";
cin >> op;
// 输入第二个数(校验是否为合法数字)
cout << "请输入第二个数:";
while (!(cin >> num2)) {
cout << "输入错误!请输入有效的数字:";
clearInputBuffer();
}
// 运算逻辑与异常处理
switch (op) {
case '+':
result = add(num1, num2);
break;
case '-':
result = subtract(num1, num2);
break;
case '*':
result = multiply(num1, num2);
break;
case '/':
if (num2 == 0) {
cout << "错误:除数不能为0!" << endl;
isError = true;
} else {
result = divide(num1, num2);
}
break;
case '%':
if (num2 == 0) {
cout << "错误:取模运算的除数不能为0!" << endl;
isError = true;
} else {
// 浮点数转整数(截断小数部分)
int intNum1 = static_cast<int>(num1);
int intNum2 = static_cast<int>(num2);
// 【关键修复】调用重命名后的取模函数
result = mod(intNum1, intNum2);
}
break;
default:
cout << "错误:输入的运算符非法!仅支持 +、-、*、/、%" << endl;
isError = true;
break;
}
// 无错误时输出结果(保留2位小数)
if (!isError) {
cout << fixed << setprecision(2);
cout << num1 << " " << op << " " << num2 << " = " << result << endl;
}
return 0;
}
这里空空如也






有帮助,赞一个