Проблема с результатом на вершине стека - PullRequest
0 голосов
/ 02 февраля 2019

У меня была проблема с вычислением, и я не мог понять, где проблема.Он должен вытолкнуть последние 2 числа, добавленные в стек, и вытолкнуть последний оператор с более высоким приоритетом из стека, вычислить их и поместить результат в начало стека.Но когда я выполняю код, он показывает только последний номер, добавленный в стек.

int shunting_yard(char string[]) {

    for(int i = 0; i < strlen(string); i++) {
        if(string[i] == ' ') {
            continue;
        }

        else if (string[i] == '(' ) {
            push_opr(string[i]);
        }

        else if (isdigit(string[i])) {
            int val = 0;
            while(i<strlen(string) && isdigit(string[i])) { 
                //if it is a number of multiple digits
                val = (val * 10) + (string[i] - '0');
                i++;
            }
            push_number(val);
        }

        else if(string[i] == ')' ) {
            while(!isEmpty_c(top_c) && last_c() != '(' ) {
                int val2 = pop_number();
                int val1 = pop_number();
                char op = pop_opr();
                push_number(calculation(val1, val2, op));
            }
            pop_opr();
        }

        else {
            while(!isEmpty_c(top_c) && precedence(top_c) >= precedence(string[i])) {
                int val2 = pop_number();
                int val1 = pop_number();
                char op = pop_opr();
                push_number(calculation(val1, val2, op));
            }
            push_opr(string[i]);
        }
    }

    while(!isEmpty_c(top_c)) {
        int val2 = pop_number();
        int val1 = pop_number();
        char op = pop_opr();
        push_number(calculation(val1, val2, op));
    }

    return last();
}
...