我无法从中获得输出

时间:2017-07-26 06:32:41

标签: c++ stack

#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 :(得分: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循环)。