Итак, у меня есть код, над которым я работаю, практически все готово (за исключением некоторых ненужных частей в коде, который я должен удалить). Это упражнение на C ++, касающееся стеков и связанных списков. Программа в значительной степени работает так, как должна, за исключением одного крохотного бита. В случае 4 моего оператора switch, когда программа должна распечатать связанный список, она завершит программу после этого, вместо того, чтобы вернуться в меню для выбора пользователем. Я все перепробовал и проверил, но все равно работает. Если бы кто-нибудь мог помочь мне определить, почему программа закрывается, я был бы признателен.
основной файл
#include <iostream>
#include "Stacks.h"
using namespace std;
int main()
{
//crear un menú para el usuario que vea las opciones para el stack
Stack myStack;
myStack.initializeStack();
char answer;
int x = 0;
bool exit = false;
while(!exit)
{
cout << "\nChoose option from menu: " << endl;
cout << "1) Enter value into stack (push) " << endl;
cout << "2) Remove last value from stack (pop) " << endl;
cout << "3) See value at top of stack (top) " << endl;
cout << "4) Print full stack " << endl;
cout << "5) Exit program " << endl;
cout << "Option: ";
cin >> answer;
switch(answer)
{
case '1':
int item;
cout << "\nEnter value to add to stack: ";
cin >> item;
myStack.push(item);
break;
case '2':
myStack.pop();
break;
case '3':
x = myStack.top();
if (!myStack.isEmptyStack())
cout << "\tTop value at stack: " << x << endl;
break;
case '4':
myStack.printStack();
exit = false;
break;
case '5':
exit = true;
break;
default:
cout << "Incorrect instruction" << endl;
break;
}
}
}
заголовочный файл
#include <iostream>
using namespace std;
struct nodeType
{
int info;
nodeType *link;
};
class Stack
{
public:
void initializeStack();
bool isEmptyStack();
bool isFullStack();
void push(int);
void pop();
int top();
void printStack();
Stack();
private:
nodeType *stackTop;
nodeType *list;
};
файл реализации
#include <iostream>
#include "Stacks.h"
using namespace std;
void Stack::initializeStack()
{
stackTop = NULL;
}
bool Stack::isEmptyStack() //verifica si el stack está vacío o no
{
return (stackTop == NULL);
}
bool Stack::isFullStack()
{
return false; //lista encadenada no tiene límite
}
void Stack::push(int newItem) //añade un nodo al stack y le asigna el top
{
nodeType *q;
q = new nodeType;
q->info = newItem;
q->link = stackTop; //creaste un nodo nuevo y le pusiste el valor que enviaste
//se pone stackTop en vez de Null para que la lista se pueda conectar
stackTop = q; //pusiste el Top en el nodo
}
void Stack::pop() //remueve el top del stack
{
if(!isEmptyStack())
stackTop = stackTop->link; //mueves el top al nodo de abajo
else
cout << "\t<ERROR> Stack is empty. " << endl;
}
int Stack::top() //devuelve el top del stack
{
if(!isEmptyStack())
return stackTop->info;
else
cout << "\t<ERROR> Stack is empty." << endl;
}
void Stack::printStack()
{
//imprime el top y de ahí va bajando
if(isEmptyStack())
cout << "<ERROR> Stack is empty." << endl;
else
{
nodeType *curr;
curr = stackTop;
while(curr->info != 0)
{
cout << curr->info << "<-";
curr = curr->link;
}
}
}