#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)
Pergunta
cleyvison
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
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.