Ir para conteúdo
Fórum Script Brasil
  • 0

Erro em retorno de função


cleyvison

Pergunta

Caros amigos,

Fiz o seguinte programa:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>


struct tipopilha
{
    char dado[5];
    struct tipopilha *prox;
};


void inicializapilha (struct tipopilha **pilha)
{
    *pilha=NULL;
    return;
}

int pilhavazia (struct tipopilha *pilha)
{
    if (pilha==NULL)
        return 1;
        else
            return 0;
}
char tipopilha (struct tipopilha *pilha)
{
    return pilha ->dado[5];
}
void inserepilha (struct tipopilha **pilha, char dadonovo[5])
{
    struct tipopilha *p1;
    p1=malloc (sizeof(struct tipopilha));
    strcpy (p1->dado,dadonovo); /* Copia dadonovo em p1->dado  */
    p1->prox=*pilha;
    *pilha=p1;
//    printf ("dado (insere) = %s\n", p1->dado);  ESTA LINHA FOI COLOCADA PARA TESTAR A VARIAVEL NESTE PONTO
//    printf ("dadonovo (insere) = %s\n", dadonovo); ESTA LINHA FOI COLOCADA PARA TESTAR A VARIAVEL NESTE PONTO
//    printf ("*pilha   (insere) = %s\n",*pilha); ESTA LINHA FOI COLOCADA PARA TESTAR A VARIAVEL NESTE PONTO
//    printf ("*p1      (insere) = %s\n",p1); ESTA LINHA FOI COLOCADA PARA TESTAR A VARIAVEL NESTE PONTO
    return;
}
int retirapilha (struct tipopilha **pilha)
{
    struct tipopilha *p1;
    char car[5];
    p1=*pilha;
    *pilha=p1->prox;
    strcpy (car,p1->dado); /* Copia p1->dado em car */
    free(p1);
//    printf ("\ncar     (retira) = %s\n", car); ESTA LINHA FOI COLOCADA PARA TESTAR A VARIAVEL NESTE PONTO
//    printf ("*pilha    (retira) = %s\n",*pilha); ESTA LINHA FOI COLOCADA PARA TESTAR A VARIAVEL NESTE PONTO
//    printf ("*p1       (retira) = %s\n",(p1->prox)); ESTA LINHA FOI COLOCADA PARA TESTAR A VARIAVEL NESTE PONTO
    return car;
}
int main ()
{
    char dado[5];
    struct tipopilha *p1;
    int i;
    inicializapilha (&p1);

    for (i=1;i<=5;i++)
    {
        printf ("\nDigite o %i Dado: ",i);
        scanf ("%s",&dado);
        inserepilha(&p1,dado);
    }
    printf ("\n");
    while (!pilhavazia(p1))
    {
      printf (" Posiçao %5i dado %5s\n",i=i-1, retirapilha (&p1)); /* AQUI DEVERIA RETORNAR O VALOR EXISTENTE NA POSIÇÃO QUE ESTA SENDO "LIMPADA"*/
        
    }
    
    
    
    system("PAUSE"); 
    return 0;
}
inicialmente ele apresentou o erro de so guardar o primeiro caracter da string, isto foi ressolvido usando strcpy. antes de usar esta função o retorno era exatamente o que eu queria, nesta linha ele retornava o valor que estava sendo retirado:
printf ("\n");
    while (!pilhavazia(p1))
    {
      printf (" Posiçao %5i dado %5s\n",i=i-1, retirapilha (&p1)); /* AQUI DEVERIA RETORNAR O VALOR EXISTENTE NA POSIÇÃO QUE ESTA SENDO "LIMPADA"*/
        
    }

só que agora ele me retorna o seguinte:

poisção X dado (exibe um caracter que eu chamo de cara de gato, rsrsrsrs)

alguém pode me ajudar?

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...