2017-07-26 60 views
0
#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; 

} 
+2

请澄清你的问题。 –

+0

你能指定你给程序的输入和你期望的输出吗? – CiaPan

+0

实际上发生了错误 –

回答

1

最简单的错误修复方法是将int size=10;更改为static const int size=10;。 在此之后,除了stack[top];为空语句发生警告之外,在for(int i=top;i<size-1;i++)中的display循环中存在逻辑错误,它应该是for(int i=top;i<size;i++)for(int i=top;i<=size-1;i++)

0

正如TomášZahradníček回答的那样,您需要修复一些东西来编译代码(使用-std = C++ 11)。

我在display方法中使用for(int i=top; i<size; ++i)。我还补充说,你的pop方法可以简单地做top++;而不覆盖堆栈。无论如何,关于你在cout上没有打印任何东西的问题:你显然尝试了1个物品被推入堆栈,但没有与2,这将指出错误的行(for循环)。

+0

我已经写了display(); –

+0

你的代码现在编译了吗?你(重新)产生错误吗?你给你的可执行文件有什么输入? – fzd

+0

我的程序没有编译 –