评估字符数组中给出的数学表达式

时间:2014-03-31 23:56:22

标签: c parsing segmentation-fault atoi

所以,我有一个表单的输入表达式 ......?5 + 8 ......

我需要解析它并评估结果。既然我知道表达式开始之后?以'结尾',我试过了:

int evaluate(char *buffer){
char exp[50];
while(buffer[i] != '+' || buffer[i] != '-' || buffer[i] != '*' || buffer[i] != '/'){
    exp[j] = buffer[i];
    i++;
    j++;
}
exp[j] = '\0';
int number1 = atoi(exp);

char operation = buffer[i];
i++;
j = 0;
while(buffer[i] !=' '){
    exp[j] = buffer[i];
    i++;
    j++;    
}
exp[j] = '\0';
int number2 = atoi(exp);

 switch(operation)....
 }

其中j从0初始化,i初始化为?之后的位置。

使用evaluate(buffer);

调用该函数

但是,我不断收到错误Segmentation Fault(core dumped)。

EDIT 这是调试器输出

82                              evaluateExp(buffer);
(gdb) next

Program received signal SIGSEGV, Segmentation fault.
0x0000000000401257 in evaluateExp (
buffer=0x603010 "GET /calculate.html?555+777 HTTP/1.1\nHost:localhost\n\n") at webserver.c:108
108             while(buffer[i] != '+' || buffer[i] != '-' || buffer[i] != '*' || buffer[i] != '/'){
(gdb) next

Program terminated with signal SIGSEGV, Segmentation fault.
The program no longer exists.

任何想法?

1 个答案:

答案 0 :(得分:0)

#include <stdio.h>

int evaluate(char *buffer){
    char operation[2];
    int number1, number2;
    sscanf(buffer, "?%d%1[+*/-]%d", &number1, operation, &number2);
    switch(operation[0]){
    case '+':
        return number1 + number2;
    case '-':
        return number1 - number2;
    case '*':
        return number1 * number2;
    case '/':
        return number1 / number2;
    }
}
int main(void){
    char exp[50];
    fgets(exp, sizeof(exp), stdin);
    printf("%d\n", evaluate(exp));
    return 0;
}