O meu ele está gerando mas já esta aparecendo o próximo nó então fica um a mais na lista e os outros comandos as vezes funcionam outras não.
#include <stdlib.h>
#include <stdio.h>
#include <locale.h>
#include <string.h>
#include <iostream>
#include <iomanip>
// DEFININDO O TAMANHO
#define tamanho 5
//DECLARANDO A ESTRUTURA
typedef struct tipo_proc {
char nome[10];
int PID;
} tipo_proc;
typedef struct tipo_pilha {
tipo_proc dados [tamanho];
int topo;
int ini;
} tipo_pilha;
// VARIÁVEIS GLOBAIS
tipo_pilha pilha;
int op;
//FUNÇÃO DE RETORNO PARA MOSTRAR A PILHA
void mostrar_pilha()
{
int i;
printf("\nSua pilha: \n\n");
for (i = 0; i < pilha.topo; i++) {
printf("%d %s\n", pilha.dados.PID, pilha.dados.nome);
}
}
// FUNÇÃO DE RETORNO PARA RETORNAR O MENU
void mostrar_menu()
{
printf("\n\n1 - Adicionar elemento na pilha.\n"
"2 - Excluir elemento da pilha.\n"
"3 - Esvaziar a pilha totalmente.\n"
"0 - Encerrar o programa.\n");
}
//FUNÇÃO PARA EMPILHAR OS ELEMENTOS
void empilhando(tipo_proc elemento)
{
if (pilha.topo == tamanho) {
printf("A pilha está cheia, impossivel empilhar!");
system("pause");
}
else {
pilha.dados[pilha.topo] = elemento;
pilha.topo++;
}
}
//FUNÇÃO PARA DESEMPILHAR OS ELEMENTOS
tipo_proc desempilhando()
{
tipo_proc elemento;
if (pilha.ini == pilha.topo) {
printf("A pilha está vazia, impossivel desempilhar!\n");
system("pause");
}
else {
elemento = pilha.dados[pilha.topo];
for(int i=0; i<tamanho; i++)
pilha.dados[pilha.topo]=elemento;
pilha.topo--;
return elemento;
}
}
// FUNÇÃO PARA ESVAZIAR A PILHA
void esvaziar_pilha()
{
int i;
if (pilha.topo == pilha.ini) {
printf("A pilha esta vazia, impossivel esvaziar!\n\n");
system("pause");
}
else {
for (i = 0; i < tamanho; i++)
{
pilha.dados[pilha.topo];
pilha.topo--;
}
}
}
int main()
{
setlocale(LC_ALL, "Portuguese");
pilha.topo = 0;
pilha.ini = 0;
tipo_proc processo;
processo.PID = 0;
tipo_proc backup;
int i;
op = 1;
while(op != 0){
printf("\n ---------------------* Pilha *----------------------- \n");
printf("1 - Adicionar elemento na pilha.\n");
printf("2 - Excluir elemento da pilha.\n");
printf("3 - Esvaziar a pilha totalmente.\n");
printf("0 - Encerrar o programa.\n");
printf("S. sair \n");
printf("\nEscolha sua opcao: ");
scanf("%d", &op);
switch (op)
{
case 1 :
printf("\nInsira o nome do processo:\n");
scanf("%s",&processo.nome);
empilhando(processo); //metodo que empilha;
printf("\nDado da pilha:\n");
for (i = 0; i <= pilha.topo; i++){
printf("PID: %d - Nome: %s\n",i,pilha.dados.nome );
}
break;
case 2 :
backup = desempilhando();
printf("\nConteudo desempilhado:\n");
printf("PID: %d - Nome: %s\n",backup.PID,backup.nome);
desempilhando();
break;
case 3 :
esvaziar_pilha(); //metodo que esvazia
break;
}
}
printf("\nInsira o nome do processo:\n");
scanf("%s",&processo.nome);
empilhando(processo); //metodo que empilha;
processo.PID ++;
fflush(stdin);
empilhando(processo);
printf("\n dados da pilha \n");
printf("PID : %d - nome :%s\n\n",pilha.dados[pilha.ini].PID,pilha.dados[pilha.ini].nome );
}
Ajuda aee.