#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
, вы случайно пишете в из-за этой ошибки.