从左到右的评价

时间:2016-03-09 04:29:18

标签: c switch-statement

我正试图在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);

}

感谢任何帮助。

2 个答案:

答案 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}}