2017-07-26 61 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

我的程序沒有編譯 –