Estaba aprendiendo sobre pilas y haciendo un ejercicio se me ocurrió que envés de pedirle datos númericos al usuario le pidiera cadenas de texto. El ejercicio pide que esto se haga en un menú. La cosa es que hice el correspondiente código pero cuando el usuario pide que le muestren los datos (nombres) registrados, se muestran todos menos el primero.
Ej: Si digita Daniel,Jose,Marta , al imprimir muestra Marta,Jose pero no muestra a Daniel
Aunque esto no sea practico en un entorno real solo por curiososidad me gustaría que alguien aclarara mi duda.
#include<iostream>
#include<stdlib.h>
using namespace std;
struct Nodo
{
string nombreCompleto;
struct Nodo *sgte;
};
void agregar(Nodo *&, string);
void sacar(Nodo *&, string&);
void menu();
int main() {
menu();
system("pause");
return 0;
}
void agregar(Nodo *&pila, string n)
{
Nodo *nuevo = new Nodo();
nuevo->nombreCompleto = n;
nuevo->sgte = pila;
pila = nuevo;
cout << "Se agrega " << nuevo->nombreCompleto;
}
void sacar(Nodo *&pila, string& n)
{
Nodo *aux = pila;
n = aux->nombreCompleto;
pila = aux->sgte;
delete aux;
}
void menu()
{
Nodo *pila = NULL;
string flag = "0", data;
int *opcion, n = 0;
do{
while (n <= 0 || n > 3)
{
cout << "Digite 1 para almacenar, 2 para mostrar los elementos de la pila y 3 para salir: "; cin >> n;
}opcion = &n;
switch (*opcion)
{
case 1:cout << "\nInserte un nombre "; cin >> data; agregar(pila, data); cout << "\n\n";
break;
case 2:cout<<"Los elementos de la pila son: \n\n";
while (pila != NULL)
{
sacar(pila, data);
if (pila != NULL) {
cout << data << " , ";
}
else
{
cout << "\n*FIN datos*\n\n";
}
}flag = "3";
break;
case 3:system("cls"); cout << "El proceso ha terminado.\n\n"; flag = "3";
break;
} n = 0;
} while (flag!="3");
}