C 7-20 简单计算器

模拟简单运算器的工作。假设计算器只能进行加减乘除运算,运算数和结果都是整数,四种运算符的优先级相同,按从左到右的顺序计算。

输入格式:

输入在一行中给出一个四则运算算式,没有空格,且至少有一个操作数。遇等号”=”说明输入结束。

输出格式:

在一行中输出算式的运算结果,或者如果除法分母为0或有非法运算符,则输出错误信息“ERROR”。

输入样例:

1+2*10-10/2=

输出样例:

10


 

 1 #include <stdio.h>
 2 int main()
 3 {
 4     char c;
 5     int ret;       //存放当前运算的结果
 6     int digit = 0; //存放操作数
 7     char op = 0;   //存放前面的运算符
 8     int flag = 1;  //非法运算标志
 9     do {
10         scanf("%c", &c);
11         if (flag) { //遇到非法运算即停止运算,但还是接受输入
12             if (c>='0'&&c<='9') {
13                 digit = digit*10+c-'0'; 
14             }
15             else if (c=='+'||c=='-'||c=='*'||c=='/'||c=='=') {//此运算符前面的op对应的运算可做了
16                     if (op) {
17                         if (op=='+') ret += digit;   //digit是c前面的数字,运算的第二个操作数
18                         else if (op=='-') ret -= digit;
19                         else if (op=='*') ret *= digit;
20                         else if (op=='/'&&digit) ret /= digit;
21                         else flag = 0; //除数为0非法
22                     }
23                     else {
24                         ret = digit; //op=0表明c是第一个运算符,ret初始化为digit这第一个数
25                     }
26                     op = c;
27                     digit = 0; //为了c后面的数字
28             }
29             else flag = 0; //非法运算符
30         }
31     }while (c != '=');
32     if(flag) printf("%d\n", ret);
33     else printf("ERROR\n");
34     return 0;
35 }

猜你喜欢

转载自www.cnblogs.com/cannedfish/p/10846406.html