在指定位置打印 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]);
}
我在头文件中有一个命名空间,实现了一个基本堆栈。 现在在 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]);
}