2016-03-09 54 views
0

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

} 

任何帮助表示赞赏。

+1

提示:使你的第一个数字你'ans',然后继续做与'ans'计算。 – nneonneo

回答

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; 
} 
+0

啊,所以我只好修改我的答案。我现在明白了。非常感谢你! – Neil

0

根据你给出的例子中,假设每个号码将是单个数字号码。

试试这个:

#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,j; 

    printf("Enter your expression: "); 
    fgets(exp, 20, stdin); 
    length = strlen(exp); 
    char ch; 
    ans = exp[i]-'0'; 
    i++; 
    while (i <= length) 
    { 
     switch (exp[i]) 
     { 
      case '+': 
       i++; 
       ans += (exp[i]-'0'); 
       break; 
      case '-': 
       i++; 
       ans -=(exp[i]-'0'); 
       break; 
      case '*': 
       i++; 
       ans *=(exp[i]-'0'); 
       break; 
      case '/': 
       i++; 
       ans /= (exp[i]-'0'); 
       break; 

      default: 
       break; 
     } 
     i++; 
     //printf("The answer is %d\n", ans); 
    } 
    printf("The answer is %d\n", ans); 
    exit(0); 
} 
相关问题