#include<iostream>
using namespace std;
class stack
{
int size=10;
int stack[size]={0}, value=0, top;
top=size;
public:
void push(int v)
{
if(top==0)
cout<<"\nstack is full\n";
else
{--top;
stack[top]=v;}
}
void pop()
{
if(top==size)
cout<<"\nstack is empty\n";
else
{top++;
stack[top];
stack[top-1]=0;
}
}
void display()
{
if(top==size)
cout<<"\nstack empty\n";
else
{
for(int i=top;i<size-1;i++)
{
cout<<stack[i];
}
}
}
};
int main()
{
stack s;
char t;
int value,ch;
do
{
cout<<"\n1.push\n";
cout<<"\n2.pop\n";
cout<<"\n3.display\n";
cout<<"enter choice:\n";
cin>>ch;
switch(ch)
{
case 1:cout<<"\nenter the value to be pushed\n";
cin>>value;
s.push(value);
break;
case 2:s.pop();
break;
case 3:s.display();
break;
default:
cout<<"\nwrong choice\n";
}
cout<<"\ndo u want to retry\n";
cin>>t;
}while(t=='y' || t=='Y');
return 0;
}
答案 0 :(得分:1)
对发生错误的最简单修复方法是将int size=10;
更改为static const int size=10;
。
在此之后,除了stack[top];
为空语句的警告之外,display
中的for(int i=top;i<size-1;i++)
循环中存在逻辑错误,其中应该是for(int i=top;i<size;i++)
或for(int i=top;i<=size-1;i++)
答案 1 :(得分:0)
正如TomášZahradníček所回答的那样,你需要修改一些东西才能编译你的代码(使用-std = c ++ 11)。
我在for(int i=top; i<size; ++i)
方法中使用了display
。我还补充说,您的pop
方法可以简单地执行top++;
而不会覆盖堆栈。
无论如何,关于你在cout上没有打印的问题:你显然试过在堆栈中推送1个项目,但是没有2,这会指向错误的行(for
循环)。