制作简易的算术计算器
编写程序实现一个简单的计算器(可实现加减乘除即可)。
要求从键盘输入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 | 输出结果整齐划一,易于阅读 |