Fivestar
Fivestar

Reputation: 323

C++ Stack values not working correctly

I am trying to implement a system that would perform something like say the user enters 4 5 +. It would add the 4 and 5 (9) and push 9 into the stack. For some reason the values in the stack are huge numbers so I believe it has something to do with a pointer or accessing a wrong field but I'm pulling my hair out trying to find the error. Any help on what I'm doing wrong?

#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();
}

And the implementation of stack

#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]);
    }
}

Upvotes: 0

Views: 226

Answers (1)

huseyin tugrul buyukisik
huseyin tugrul buyukisik

Reputation: 11926

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
    }
}

Be sure to convert those ascii codes(49 ish) from keyboard to integer type explanations.

 input - 48 should do it.

Upvotes: 3

Related Questions