制作简易的算术计算器
编写程序实现一个简单的计算器(可实现加减乘除即可)。
要求从键盘输入2个数和一个运算符,输出对应的计算结果。


#include <stdio.h>
int main()
{
double num1, num2, result;
char symbol;
printf("简易计算器\n");
printf("请输入算式(格式:数字 运算符 数字):\n");
if (scanf("%lf %c %lf", &num1,&symbol,&num2) != 3)
{
printf("输入格式错误!\n");
return 1;
}
switch (symbol)
{
case '+':
result = num1 + num2;
printf("%.2lf + %.2lf = %.2lf\n", num1, num2, result);
break;
case '-':
result = num1 - num2;
printf("%.2lf - %.2lf = %.2lf\n", num1, num2, result);
break;
case '*':
case 'x':
case 'X':
result = num1 * num2;
printf("%.2lf * %.2lf = %.2lf\n", num1, num2, result);
break;
case '/':
if (num2 == 0)
{
printf("错误:除数不能为零!\n");
return 1;
}
result = num1 / num2;
printf("%.2lf / %.2lf = %.2lf\n", num1, num2, result);
break;
default:
printf("错误:不支持的运算符 '%c'\n", symbol);
printf("支持的运算符:+ - * / x X\n");
return 1;
}
return 0;
}
📜 代码整体结构
变量声明 :使用 double 保证计算精度。
输入与验证 :利用 scanf 的返回值进行一次性格式检查。
核心逻辑 :使用 switch 语句分发不同的运算任务。
安全机制 :专门处理除数为零的情况。
输出 :格式化输出结果,保留两位小数。
🧐 逐行详细解析
1. 变量定义与提示

double:这里没有使用 float 或 int,而是选择了 double(双精度浮点型)。这是科学计算和工程应用中的标准选择,因为它能提供更高的精度,减少计算误差。
提示语 :清晰地告诉用户预期的输入格式(例如 10 + 20),这是良好用户交互的第一步。
2. 高级输入验证(亮点)

scanf 的返回值:这是一个非常专业的用法。scanf 函数会返回成功读取并赋值的变量个数。
##### 如果用户输入 `10 + 5`,`scanf` 成功读取了三个数据,返回 `3`,程序继续。
##### 如果用户输入 `abc + 5`(第一个不是数字),或者只输入了 `10 +`(缺少数据),`scanf` 返回的值就会小于 3。
作用 :这一行代码就防止了因为用户乱输入导致程序后续逻辑崩溃的情况,体现了代码的健壮性。
3. Switch 分支与多重 Case

Case 穿透(Fall-through):注意看乘法部分,连续写了三个 case 却没有加 break。
##### 这意味着,如果用户输入 `*`、`x` 或 `X`,程序都会执行同一块代码(乘法运算)。
##### **用户体验** :这非常贴心,因为普通键盘上打不出数学乘号 `×`,用户习惯用字母 `x` 或 `X` 代替,代码完美兼容了这种习惯。
4. 除零保护

逻辑:在执行除法前,必须检查分母(num2)是否为 0。
后果:在数学中除以零无意义;在计算机中,浮点数除以零可能得到无穷大(inf),而整数除以零会导致程序直接崩溃。这里通过 if 判断优雅地拦截了这种错误,并返回错误码 1。
5. 默认错误处理

如果用户输入了 % 或 & 等不支持的符号,程序会进入 default 分支。
提示:它不仅报错,还告诉用户"支持哪些运算符",这是一种非常友好的错误提示设计。
6. 格式化输出

%.2lf:这是一个格式控制符。
##### `l` 代表 `long`(对应 double)。
##### `.2` 代表**保留两位小数** 。例如输入 `10 / 3`,结果显示为 `3.33`,使界面整洁美观。
📊 功能特性总结
| 特性 | 代码实现细节 | 优点 |
|---|---|---|
| 精度 | 使用 double 和 %lf |
计算结果准确,支持小数运算 |
| 安全性 | scanf(...) != 3 检查 |
防止非法输入导致程序异常 |
| 兼容性 | case 'x': case 'X': |
符合用户直觉,不仅限于标准符号 |
| 防御性 | if (num2 == 0) |
避免运行时崩溃(除零错误) |
| 可读性 | %.2lf |
输出结果整齐划一,易于阅读 |