栈的问题,运行不出来,应该怎么改

栈的问题
刚学没多久,但是运行不出来,应该怎么改

#include<iostream>
#include<stdbool.h>
using namespace std;
const int MAXSIZE=80;
class Stack{
    private:
        char *data;
        int top,size;
    public:
        Stack();
        Stack(int s);
        ~Stack();
        void push(char ch);//入栈
        char pop();//出栈并返回栈顶元素
        char getPop();//获得栈顶元素
        bool isEmpty();//栈是否为空
        bool isFull();//栈是否为满 
        void setNull();//设置栈栈为空 
        class Full{};//内部异常类 
        class Empty{};
        void Cleartop();
};
Stack::Stack(){
    top=-1;
    size=MAXSIZE;
    data=new char[MAXSIZE];
    //char *data=new char[MAXSIZE]; 
} 
Stack::Stack(int s){
    top=-1;
    size=s;
    data=new char[MAXSIZE];    
}
Stack::~Stack(){
    delete [] data;
}
void Stack::push(char ch){
//    if(isFull()==0)data[++top]=ch;    
    if(isFull()==1){
        throw Full();
    }else{
        data[++top]=ch;    
    } 
}
char Stack::pop(){
    if(isEmpty()==1){
        throw Empty();
    }else{
        return data[top--];
    }
}
char Stack::getPop(){
    if(isEmpty()==0)return data[top--];    
}
bool Stack::isEmpty(){
    if(top==-1)return true;
    else return false;
}
bool Stack::isFull(){
    if(top+1==size)return true;
    else return false;
}
void Stack::setNull(){
    top=-1;
}
void Stack::Cleartop(){
    top--;
}
int main(){
    char ch;
    Stack st;
    while(scanf("%c",&ch)!='#'){
        st.push(ch);
        if(ch=='<'){
            st.Cleartop();
        }else if(ch=='@'){
            st.setNull();
        }
    }
}


img

img

具体是什么错误?

添加头文件 来包含 scanf 函数声明。
将 std::bool 替换为 bool,因为 bool 是C++中的内置类型,无需包含头文件 <stdbool.h>。
在 getPop 函数中,如果栈为空,没有返回值。您可以添加一个 return 语句,并设置一个默认值来处理这种情况。

【以下回答由 GPT 生成】

#include <iostream>
#include <stdexcept>
using namespace std;

const int MAXSIZE = 80;

class Stack {
private:
    char *data;
    int top, size;
public:
    Stack();
    Stack(int s);
    ~Stack();
    void push(char ch);//入栈
    char pop();//出栈并返回栈顶元素
    char getPop();//获得栈顶元素
    bool isEmpty();//栈是否为空
    bool isFull();//栈是否为满
    void setNull();//设置栈为空
    class Full {}; //内部异常类
    class Empty {};
    void Cleartop();
};

Stack::Stack() {
    top = -1;
    size = MAXSIZE;
    data = new char[size];
}

Stack::Stack(int s) {
    top = -1;
    size = s;
    data = new char[size];
}

Stack::~Stack() {
    delete[] data;
}

void Stack::push(char ch) {
    if (isFull()) {
        throw Full();
    }
    data[++top] = ch;
}

char Stack::pop() {
    if (isEmpty()) {
        throw Empty();
    }
    return data[top--];
}

char Stack::getPop() {
    if (isEmpty()) {
        throw Empty();
    }
    return data[top];
}

bool Stack::isEmpty() {
    return top == -1;
}

bool Stack::isFull() {
    return top == size - 1;
}

void Stack::setNull() {
    top = -1;
}

void Stack::Cleartop() {
    // Code to clear top of the stack
}

int main() {
    // 测试栈代码
    Stack stack(10);
    stack.push('A');
    stack.push('B');
    stack.push('C');
    cout << "Pop: " << stack.pop() << endl; // 出栈并打印栈顶元素
    cout << "Pop: " << stack.pop() << endl;
    cout << "Pop: " << stack.pop() << endl;
    return 0;
}


【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^