C ++堆栈值无法正常工作

时间:2015-02-17 23:06:21

标签: c++ stack

我正在尝试实现一个能够执行类似用户输入4 5 +的系统。它会添加4和5(9)并将9推入堆栈。 由于某种原因,堆栈中的值是巨大的数字,所以我相信它与指针或访问错误的字段有关但我正在试图找出错误。对我做错的任何帮助?

#include "stack.h"

int main()
{
    stack Test;
    bool stop = false;
    float runningtotal = 0;
    while (stop == false)
    {
        char input;
        cin >> input;
        if (input == '+') {
            int value1 = Test.top();
            Test.pop();
            int value2 = Test.top();
            Test.pop();
            cout << value1+value2 << endl;
            Test.push(value1 + value2);
        }
    cout << Test.top();
    std::getchar();
    std::getchar();
}

并实现堆栈

#include "stack.h"
stack::stack()
{
    maxsize = MaxSize;
    currentsize = 0;
    sptr = new StackElement[maxsize];
}

stack::~stack()
{
    delete [] sptr;
}

void stack::push(StackElement data)
{
    if (currentsize < maxsize)
    {
        sptr[currentsize] = data;
        currentsize++;
    } else {
        cout << "Stack is full ;-;";
    }
}

void stack::pop()
{
    if (currentsize == 0) {
        cout << "Empty stack? ;-;";
        return;
    }
    currentsize--;
}

StackElement stack::top()
{
    if (currentsize == 0) {
        cout << "Empty stack u ninja ;-;";
        return NULL;
    } else {
        return (sptr[currentsize]);
    }
}

1 个答案:

答案 0 :(得分:3)

void stack::push(StackElement data)
{
    if (currentsize < maxsize)
    {
        sptr[currentsize] = data;
        currentsize++; //<--- incrementing after so nothing in [currentsize] now
    } else {
        cout << "Stack is full ;-;";
    }
}


StackElement stack::top()
{
    if (currentsize == 0) {
        cout << "Empty stack u ninja ;-;";
        return NULL;
    } else {
        return (sptr[currentsize]);// should use currentsize-1
                                   // latest filled cell
                                   // since its pushing from top
    }
}

请务必将这些ascii代码(49 ish)从键盘转换为整数类型的解释。

 input - 48 should do it.