我正试图在C中进行从左到右的评估。没有任何优先顺序。所以5 + 3 * 2应该是16.我知道如何使用2个数字和一个运算符,但是,我无法弄清楚如何为2 + 4-5 + 2这样的表达式做同样的事情。
这就是我对2个数字的看法:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SIZE 20
int main(void)
{
char exp[SIZE];
int ans,c, i=0;
int length;
printf("Enter your expression: ");
fgets(exp, 20, stdin);
length = strlen(exp);
--length;
for(int j=0; j<length; j++)
{
while (exp[i]!='\n')
{
// putchar(exp[i]);
i++;
switch (exp[i])
{
case '+':
ans = (exp[i]-'0') + (exp[2]-'0');
printf("The answer is %d\n", ans);
break;
case '-':
ans = (exp[0]-'0') - (exp[2]-'0');
printf("The answer is %d\n", ans);
break;
case '*':
ans = (exp[0]-'0') * (exp[2]-'0');
printf("The answer is %d\n", ans);
break;
case '/':
ans = (exp[0]-'0') / (exp[2]-'0');
printf("The answer is %d\n", ans);
break;
default:
break;
}
}
}
exit(0);
}
感谢任何帮助。
答案 0 :(得分:0)
假设交替数字和运算符具有单字符数字(这似乎是您所假设的),与您原始实现类似的最小实现是:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SIZE 20
int main(void) {
char exp[SIZE];
int ans, length, i;
printf("Enter your expression: ");
fgets(exp, 20, stdin);
ans = exp[0] - '0';
length = strlen(exp) - 1;
for (i = 0; i < length && exp[i] != '\n'; i++) {
switch (exp[i]) {
case '+':
ans += exp[i+1] - '0';
break;
case '-':
ans -= exp[i+1] - '0';
break;
case '*':
ans *= exp[i+1] - '0';
break;
case '/':
ans /= exp[i+1] - '0';
break;
default:
break;
}
}
printf("The answer is %d\n", ans);
return 0;
}
答案 1 :(得分:0)
根据您给出的示例,假设每个数字都是单个数字。
试试这个:
{{1}}