#include <stdio.h> #include <string.h> #include <stdlib.h> int main() { char input[100]; int num[100], i = 0; char op[100] = {0}; printf("请输入您要计算的表达式:"); fgets(input, sizeof(input), stdin); char *token = strtok(input, " "); while (token != NULL) { if (*token == '+' || *token == '-' || *token == '*' || *token == '/') { op[i++] = *token; } else { num[i] = atoi(token); if (i > 0 && op[i-1] == '*') { num[i-1] *= num[i]; i--; } else if (i > 0 && op[i-1] == '/') { num[i-1] /= num[i]; i--; } i++; } token = strtok(NULL, " "); } int result = num[0]; for (int j = 1; j < i; j++) { switch (op[j-1]) { case '+': result += num[j]; break; case '-': result -= num[j]; break; default: break; } } printf("计算结果为:%d\n", result); return 0; }为什么他无法进行运算
时间: 2024-02-14 18:13:14 浏览: 64
编译原理词法分析程序,按照老师要求编写的
5星 · 资源好评率100%
这段代码实现的是简单的四则运算,但是存在一些问题。首先,当输入的表达式中含有空格时,会导致程序无法正确解析输入。因此,建议使用scanf或者fgets读取用户输入,并且对输入进行预处理,以便正确解析数字和运算符。
另外,这段代码在处理乘除法时存在问题。对于乘法和除法,应该在读取数字时就进行运算,而不是在读取运算符时再进行运算。此外,对于除法,还需要进行除数是否为0的判断。
以下是修改后的代码:
```c
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main() {
char input[100];
int num[100], i = 0;
char op[100] = {0};
printf("请输入您要计算的表达式:");
fgets(input, sizeof(input), stdin);
char *p = input;
while (*p != '\0') {
if (*p == '+' || *p == '-' || *p == '*' || *p == '/') {
op[i++] = *p;
p++;
} else if (*p >= '0' && *p <= '9') {
int n = 0;
while (*p >= '0' && *p <= '9') {
n = n * 10 + (*p - '0');
p++;
}
if (i > 0 && op[i-1] == '*') {
num[i-1] *= n;
i--;
} else if (i > 0 && op[i-1] == '/') {
if (n == 0) {
printf("除数不能为0!\n");
return 0;
}
num[i-1] /= n;
i--;
} else {
num[i++] = n;
}
} else {
p++;
}
}
int result = num[0];
for (int j = 1; j < i; j++) {
switch (op[j-1]) {
case '+':
result += num[j];
break;
case '-':
result -= num[j];
break;
default:
break;
}
}
printf("计算结果为:%d\n", result);
return 0;
}
```
修改后的代码可以正确处理输入,并在乘除法运算时进行了修改。运行程序后,可以输入表达式进行计算。例如,输入"2 * 3 + 4 / 2 - 1",输出结果为"5"。
阅读全文