Jump to content
thedark.10013

Duvida em pilha

Recommended Posts

thedark.10013

Ola pessoal.

Estou com um problema em meu programa.

Estou conseguindo inserir carros, mas na hora de escolher a opção 2 o console para de funcionar, imprime todos menos a variável modelo que da lixo de memória.

Segue abaixo o código:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
/* DETALHES
PUSH -> INSERIR
POP -> REMOVER
*/
typedef struct nos
{
   char porte[40];
   char modelo[40];
   char cor[40];
   char chapa[8];
   struct nos *prox;
}no;
//INSERE 1 ELEMENTO EM UMA PILHA
void push(no **veiculos)
{
   no *aux;
   aux = (no *)malloc(sizeof(no));
   aux = aux->porte;
   aux = aux->modelo;
   aux = aux->cor;
   aux = aux->chapa;
   aux->prox=NULL;
   if((*veiculos) != NULL)
   {
       aux->prox = *veiculos;
   }
   (*veiculos = aux);
}
// REMOvE 1 ELEMENTO DE UMA PILHA
int pop(no **topoAux)
{
   no *aux, *aux2;
   aux = (*topoAux);
   (*topoAux) = (*topoAux)->prox;
   aux2 = aux->porte;
   aux2 = aux->modelo;
   aux2 = aux->cor;
   aux2 = aux->chapa;
   free(aux);
   return(aux2);
}
void imprimir(no *veiculo)
{
 while(veiculo != NULL)
 {
   printf(" Porde do Veiculo: %s \n", veiculo->porte);
   printf(" Modelo: %s \n", veiculo->modelo);
   printf(" Cor: %s \n", veiculo->cor);
   printf(" Placa: %s \n", veiculo->chapa);
   veiculo = veiculo->prox;
   printf("\n");
 }
}
int main()
{
   int opcao;
   no *veiculos=NULL;
   veiculos = (no *) malloc(sizeof(no));
   do
       {
           printf("\n");
           printf(" \n ---------------------------- MENU PRINCIPAL ------------------");
           printf(" \n ################################################################");
           printf(" \n ### (1) Entrada de Veiculos     (2) Saida de Veiculos        ###");
           printf(" \n ### (3) Pesquisa de Veiculos    (4) Sair                     ###");
           printf(" \n ################################################################");
           fflush (stdout);
           printf("\n ");
           printf(" DIGITE A OPCAO DESEJADA: ");
           scanf ("%d", &opcao);
           fflush (stdin);
           printf("\n");
           printf("\n");
           switch(opcao)
           {
               case 1:
                       printf("CADASTRO DE VEICULO");
                       printf("\n");
                       printf("\n");
                       printf(" Porte do Veiculo: ");
                       gets(veiculos->porte);
                       fflush(stdout);
                       printf("\n");
                       printf(" Modelo: ");
                       gets(veiculos->modelo);
                       fflush(stdout);
                       printf("\n");
                       printf(" Cor do Veiculo: ");
                       gets(veiculos->cor);
                       fflush(stdout);
                       printf("\n");
                       printf(" Placa do Veiculo: ");
                       gets(veiculos->chapa);
                           if (strlen(veiculos->chapa) > 8)
                           {
                               printf("\nNumero de placa invalida!\n");
                           }
                       fflush(stdout);
                       push(veiculos);

                       break;
               case 2:
                       imprimir(veiculos);
                       break;
           }
       }
       while(opcao!=4);
   free(veiculos);
   return 0;
}

Edited by Rui Carlos
Formatação do código.

Share this post


Link to post
Share on other sites
HappyHippyHippo

podes explicar o que está a acontecer aqui ? :

   no *aux;
   aux = (no *)malloc(sizeof(no));
   aux = aux->porte;
   aux = aux->modelo;
   aux = aux->cor;
   aux = aux->chapa;


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
thedark.10013

Ola Stake.

O aux aponta para a variável porte, modelo, cor e chapa e vai ser igual a aux.

Ta errado isso ai?

Share this post


Link to post
Share on other sites
brunoais

Sim. Porque tu estás a tentar alterar apontadores que é suposto não seres tu a gerir.

Deves copiar os dados e não redirecionar o apontador de que não tens controlo.

Edited by brunoais

"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.