#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char c, x[20], p[20];
int k = 0, l = 0, m = 0;
float y[20], num1, num2, result;
printf("请输入一个表达式:");
while(1)
{
c = getchar();
if (c >= '0' && c <= '9' || c == '.') // 数字或小数点
{
x[k] = c;
k = k + 1;
}
else if (c == '*' || c == '/' || c == '+' || c == '-') // 运算符
{
p[l] = c;
l = l + 1;
x[k] = '\0'; // 结束字符数组
y[m] = atof(x); // 将数字字符串转换为浮点数
k = 0;
m = m + 1;
}
else if (c == 'C') // 清零
{
memset(x, 0, sizeof(x)); // 将字符数组清零
memset(p, 0, sizeof(p));
k = 0;
l = 0;
m = 0;
printf("请输入一个表达式:");
continue;
}
else if (c == '=') // 计算表达式
{
x[k] = '\0';
y[m] = atof(x);
num1 = y[0];
for (int i = 0; i < l; i++)
{
num2 = y[i + 1];
switch(p[i])
{
case '+':
result = num1 + num2;
break;
case '-':
result = num1 - num2;
break;
case '*':
result = num1 * num2;
break;
case '/':
if (num2 == 0)
{
printf("除数不能为0,请重新输入!\n");
goto CLEAR; // 跳转到清零操作
}
result = num1 / num2;
break;
}
num1 = result;
}
printf("计算结果为:%f\n", result);
m = 0;
k = 0;
l = 0;
memset(x, 0, sizeof(x));
memset(p, 0, sizeof(p));
printf("请输入一个表达式:");
}
else if (c == '\n') // 忽略回车
{
continue;
}
else // 非法字符
{
printf("输入错误,请重新输入!\n");
CLEAR: // 跳转到清零操作
memset(x, 0, sizeof(x)); // 将字符数组清零
memset(p, 0, sizeof(p));
k = 0;
l = 0;
m = 0;
printf("请输入一个表达式:");
continue;
}
}
return 0;
}
-
运行程序后,输入一个表达式,例如:
3.14+2.5*2-1/0.5
-
按下回车键后,程序会输出计算结果:
计算结果为:9.140000
-
继续输入表达式,程序会一直运行,直到按下
Ctrl+C
结束程序 -
如果输入的表达式中有非法字符(除了数字、小数点、运算符和
C
),程序会提示输入错误并清零 -
如果输入的表达式中除数为0,程序会提示除数不能为0并清零