Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 堆栈显示溢出输出,但教程显示了其他输出_C++_Data Structures_Stack - Fatal编程技术网

C++ 堆栈显示溢出输出,但教程显示了其他输出

C++ 堆栈显示溢出输出,但教程显示了其他输出,c++,data-structures,stack,C++,Data Structures,Stack,我使用教程编写了这段代码。他的输出是正确的,但我得到了堆栈溢出和内存地址作为输出,尽管mycode与他的完全相同。我已经声明数组大小为100,但它仍然不工作 #include<iostream> using namespace std; #define n 100 class stack{ int* arr; int top; public: stack(){ arr=new int[n]; top=-1;

我使用教程编写了这段代码。他的输出是正确的,但我得到了堆栈溢出和内存地址作为输出,尽管mycode与他的完全相同。我已经声明数组大小为100,但它仍然不工作

#include<iostream>
using namespace std;

#define n 100
class stack{
    int* arr;
    int top;

    public:
    stack(){
        arr=new int[n];
        top=-1;
    };
    void push(int x){
        if(top=n-1){
            cout<<"Stack overflow"<<endl;
            return;

        }
        top++;
        arr[top]=x;
    };
    void pop(){
        if(top==-1){
            cout<<"No element to pop"<<endl;
            return;
        }
        top--;
    };
    int Top(){
        if(top==-1){
            cout<<"Stack is empty"<<endl;
            return -1;
        }
        return arr[top];
    };
    bool empty(){
        return top==-1;
    }

};
int main(){
    stack st;
    st.push(1);
    st.push(2);
    st.push(3);
    cout<<st.Top()<<endl;
    st.pop();
    cout<<st.Top()<<endl;
    st.pop();
    st.pop();
    st.pop();
    cout<<st.empty()<<endl;

   
   
   
    return 0;

}
#包括
使用名称空间std;
#定义n 100
类堆栈{
int*arr;
int top;
公众:
堆栈(){
arr=新整数[n];
top=-1;
};
无效推送(整数x){
如果(顶部=n-1){

cout我已经运行了代码,并且清楚地看到,在您的“推”方法中,如果“条件”中您又错过了一个“=”,我还对您的代码进行了一些修改,以帮助您解决问题。希望对您有所帮助

我做了一些小更新:

  • “inserted{integer}”-在push方法中添加了msg
  • 弹出1时显示顶部元素
  • #包括
    使用名称空间std;
    #定义n 100
    类堆栈{
    int*arr;
    int top;
    公众:
    堆栈(){
    arr=新整数[n];
    top=-1;
    };
    无效推送(整数x){
    如果(顶部==n-1){
    
    coutt这看起来像是一个完美的调试器练习。或者是一个调整编译器的练习,我不会编译这段代码:无意冒犯,但几乎每次有人说“完全一样”,这都不是;)如果(top=n-1)
    中的赋值发现很好-如果你指出你还修改了什么(以及为什么),这也很好我也是。现在你可以检查了@TedLyngmo@Usama如果解决了这个问题,请考虑回答。我已经给了你我的赞成票,但我确实觉得现在有点好了。谢谢你@ TedLyngmo。
    #include<iostream>
    using namespace std;
    
    #define n 100
    class stack{
        int* arr;
        int top;
    
        public:
        stack(){
            arr=new int[n];
            top=-1;
        };
        void push(int x){
            if(top==n-1){
                cout<<"Stack overflow"<<endl;
                return;
    
            }
            top++;
            arr[top]=x;
            cout<<"inserted "<<arr[top]<<endl;
        };
        void pop(){
            if(top==-1){
                cout<<"No element to pop"<<endl;
                return;
            }
            top--;
        };
        int Top(){
            if(top==-1){
                cout<<"Stack is empty"<<endl;
                return -1;
            }
            return arr[top];
        };
        bool empty(){
            return top==-1;
        }
    };
    int main(){
        stack st;
        st.push(1);
        st.push(2);
        st.push(3);
        cout<<st.Top()<<endl; // 3
        st.pop(); // pops 3
        cout<<st.Top()<<endl; // 2
        st.pop(); // pops 2
        cout<<st.Top()<<endl; // 1
        st.pop(); // pops 1
        st.pop(); // stack underflow
        cout<<st.empty()<<endl;
        return 0;
    }