版权声明:本文为博主原创文章,如要转载,请注明地址,谢谢^...^ https://blog.csdn.net/qq_38880380/article/details/84800077
一、需求
使用 C 语言做一个简单的计算器,能执行加、减、乘、除操作
二、实现
1、思路
(1)标准输入到str中
(2)将str中运算符和数值分别记录在两个数组中
(3)然后逐次对每个运算符和相关的左值和右值进行运算
(4)将最后的结果输出
2、代码
/*
* Author: sen
* Date: 2018-12-04
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SUM 10
#define MAX 100
typedef enum {
false, true
} bool;
float operate(float, float, char);
int main()
{
printf("************运算器************\n");
float value[SUM];
char operators[SUM];
char str[MAX];
int valueLen, operatorsLen;
valueLen = operatorsLen = 0;
if (fgets(str, MAX, stdin) != NULL) {
int length = strlen(str) - 1;
if (str[length - 1] != '=') {
printf("please input '=' at the end\n");
} else {
int start = 0;
for (int i = 0; i < length; i++) {
bool flag = false;
switch (str[i]) {
case '+':
flag = true;
operators[operatorsLen++] = '+';
break;
case '-':
flag = true;
operators[operatorsLen++] = '-';
break;
case '*':
flag = true;
operators[operatorsLen++] = '*';
break;
case '/':
flag = true;
operators[operatorsLen++] = '/';
break;
case '=':
flag = true;
break;
default:
break;
}
if (flag) {
char valueTmp[MAX];
for (int j = 0; j <= (i - start + 1); j++) {
valueTmp[j] = str[start++];
}
value[valueLen++] = atof(valueTmp);
start = i + 1;
}
flag = false;
}
}
} else {
printf("please restart!\n");
}
float leftValue = value[0];
int count = 0;
while (count < operatorsLen) {
leftValue = operate(leftValue, value[count + 1], operators[count]);
count++;
}
printf("The result is: %2.2f\n", leftValue);
return 0;
}
float operate(float num1, float num2, char symbol)
{
switch (symbol) {
case '+':
return num1 + num2;
break;
case '-':
return num1 - num2;
break;
case '*':
return num1 * num2;
break;
case '/':
return num1 / num2;
break;
default:
printf("Error,please restart!\n");
return 0;
break;
}
}