1

どこが間違っているのかわかりません。メイン関数の最後に「ポップ」するたびに、何も得られませんでした。施術後、プッシュする前後に毎回ポップしてチェックしており、結果はそこにあります。しかし、for ループの外側にポップするたびに、スタックから何も返されませんでした。前にありがとう、私はあなたの答えにとても感謝しています。PS = クラスまたは OOP の使用は許可されていません。したがって、それらの方法を使用して答えを出さないでください。

#include<iostream>
#include<conio.h>
#include<stdio.h>
#include<cstdlib>
#include<cstring>

using namespace std;

typedef struct
{
    int top;
    int data[20];
}stack;

void initStack(stack &S)
{
     int i;
     S.top=-1;
}

int pop (stack &S)
{
    int number;
    number = S.data[S.top];
    S.top = S.top - 1;
    return number;
}

void push(stack &S, int number)
{
    S.top = S.top + 1;
    S.data[S.top] = number;
}

void compute(stack &S, char *ch, int n)
{
    int result;
    for (int i = 0 ; i <= n-1; i++)
    {
        if (ch[i] == '*')
        {
            int operand1 = pop (S);
            int operand2 = pop (S);
            result = operand1 * operand2;
            push(S, result);
        }

        else if (ch[i] == '/')
        {
            int operand1 = pop (S);
            int operand2 = pop (S);
            result = operand1 / operand2;
            push(S, result);
        }

        else if (ch[i] == '+')
        {
            int operand1 = pop (S);
            int operand2 = pop (S);
            result = operand1 + operand2;
            push(S, result);
        }

        else if (ch[i] == '-')
        {
            int operand1 = pop (S);
            int operand2 = pop (S);
            result = operand1 - operand2;
            push(S, result);
        }

        else
        {
            result = ch[i] - '0';
            push(S, result);
        }
    }
}

main()
{
    stack ST;
    char ch[20];
    initStack(ST);
    cout<<"Please enter the operation: ";
    gets(ch);
    int n = strlen(ch);
    compute(ST, ch, n);
    pop(ST);
}
4

1 に答える 1

1

私が正しく理解していれば、問題は非常に単純なものです。ポップしている値を出力する必要があります

交換

pop(ST);

cout << pop(ST) << '\n';

明らかに、見たいものを印刷することを忘れない限り、何も表示されません。

于 2013-10-04T12:52:00.630 に答える