почему мои функции isEmpty и isFull не работают?

#c

#c

Вопрос:

Я реализовал stack в этом коде. Когда я использую опцию 6, цикл do-while запускается снова, а когда я использую опцию 7, switch case по какой-то причине использует регистр по умолчанию. В чем здесь ошибка? Я также попытался удалить цикл do-while, но это ничего не решило. Есть ли проблема с объектом или функции неправильные?

 #include<iostream>
using namespace std;
  
class Stack{
private:
    int top;
    int arr[5];

public:
    Stack(){
        top = -1;
        for(int i;i<5;i  ){
            arr[i]=0;
        }
    }

    bool isEmpty(){
        if(top==-1){
            return true;
        }
        else{
            return false;
        }
    }

    bool isFull(){
        if(top==4){
            return true;
        }
        else{
            return false;
        }
    }
    void push(int num){
        if(isFull()){
                cout<<"Stack Overflow";
        }
        else{
            top  ;
            arr[top] = num;
            cout<<"The number pushed is:"<<num;
        }
    }

    int pop(){
        if(isEmpty()){
            cout<<"Stack Underflow";
            return 0;
        }
        else{
            int popval = arr[top];
            arr[top] = 0;
            top--;
            return popval;
        }
    }

    int peek(){
        if(isEmpty()){
            cout<<"Stack Empty";
        }
        else{
            return arr[top];
        }
    }

    int count(){
       

        return(top 1);
      
        }


    void change(int pos,int num){
        arr[pos] = num;
    }

    void display(){
        for(int i=top;i>=0;i--){
            cout<<arr[i]<<endl;
        }
    }
};
int main(){
    Stack s1;
    int option;
    int tempnum,position;
    do{
    cout<<endl;
    cout<<"MAIN MENU"<<endl;
    cout<<"1) Push"<<endl;
    cout<<"2) Pop"<<endl;
    cout<<"3) Peek"<<endl;
    cout<<"4) Display"<<endl;
    cout<<"5) Count"<<endl;
    cout<<"6) Check Empty"<<endl;
    cout<<"7) Check Full"<<endl;
    cout<<"8) Exit"<<endl;

    cout<<"Enter your choice:";
    cin>>option;

    switch(option){
    case 1:
        cout<<"Enter the number:";
        cin>>tempnum;
        s1.push(tempnum);
        break;
    case 2:
        cout<<"The popped number is "<<s1.pop()<<endl;
        break;
    case 3:
        cout<<"Element at top is"<<s1.peek()<<endl;
    case 4:
        s1.display();
    case 5:
        cout<<"Number of elements is:"<<s1.count();
    case 6:
        if(s1.isEmpty()==true){
            cout<<"Stack Empty";
        }
        break;
    case 7:
        if(s1.isFull()==true){
            cout<<"Stack Full";
        }
    default:
        cout<<"Enter Valid Option";
    }
    }while(option!=0);
}
 

Комментарии:

1. int i; не инициализируется i . Он будет иметь неопределенное значение, и его использование приведет к неопределенному поведению .

2. На несвязанной ноте, если у вас есть if (condition) { return true; } else { return false; } , это то же самое, return condition; что и .

3. Пожалуйста, включите предупреждения вашего компилятора. Мой компилятор сразу сказал мне, что у вас отсутствуют некоторые break операторы после case s .

4. Зачем вам нужен весь этот код, чтобы просто протестировать пустые и полные функции? Просто поместите один элемент в стек, вызовите isEmpty() . Если это не работает, исправьте там код. Не добавляйте лишние и ненужные вещи в код, такие как подсказки, меню и все остальное, что у вас есть в программе. Нам нужно пройти через 3 экрана кода, чтобы увидеть простой тест тех функций, с которыми у вас возникли проблемы.

5. for(int i;i<5;i ) должно быть for(int i = 0;i<5;i ) . Возможно 0 top , вы случайно пишете в из-за этой ошибки.