在指定位置打印 int 或 char 数组有什么问题

what is wrong with printing an int or char array at specified location

我在头文件中有一个命名空间,实现了一个基本堆栈。 现在在 push 函数上,它应该将一个 char 压入堆栈并且 使用 pop 函数,它将从堆栈中删除一个字符 AND 这是我的问题,将弹出的元素打印到控制台,但是 它实际上从来没有这样做过。 我的问题是为什么会发生这种情况以及我可能遗漏了什么?

int main()
{
    myStack::push(12);
    myStack::push(344);


    myStack::pop();

    return 0;


}

和头文件:

void push(int c)
{
    if(top == max_size) throw Overflow();
    v[top] = c;
    top++;
    
}

void pop()
{
    
    printf("%d\n",v[top]);
    top--;
}

myStack 定义:

namespace myStack {

const int max_size = 200;
int top = 0;
int v[max_size];


class Overflow {
    public:
        bool isOverflow = true;
        
};

void push(int c)
{
    if(top == max_size) throw Overflow();
    v[top] = c;
    top++;
    
}

void pop()
{
    
    printf("%d\n",v[top]);
    top--;
}
}

请注意,对 push 的调用会在递增 top 之前分配给 v[top],因此在您的 pop 函数中,top 的值是一个未分配的整数。

您只需要在打印 v[top] 的值之前递减 top

void pop()
{  
    top--;
    printf("%d\n",v[top]);
}