Ir ao conteúdo

C Problemas na inserção de pilha por arranjo


Ir à solução Resolvido por Ansi C,

Posts recomendados

Postado

Peço desculpas se este problema já foi respondido, mas eu usei a função de pesquisa e não achei um igual. Eu estou implementando um programa aos poucos e estou tendo problemas para inserir. Meu programa lê uma string, então percorre a mesma e, toda vez que o caractere não for *,/,- ou +, tem que ler a entrada do usuário e inserir em uma pilha. Na hora de imprimir a pilha, todas as posições voltam zeradas, e não consigo entender o que fiz errado. Meu código até o momento:

 

#include <stdio.h>
#include <stdlib.h>
#include<string.h>
#define MAXTAM 50

typedef struct{
    float numero[MAXTAM];
    int topo;
}pilha;

void iniciapilha(pilha *p){
    p->topo=-1;
};

void insere_na_pilha(pilha *p, float a){
    p->topo++;
    p->numero[p->topo]=a;

};

void imprimir(pilha *p){
    int i=0;
    for(i=0;i<=p->topo;i++)
        printf("\n%d",p->numero[i]);
};
int main()

{   char entrada[50];
    int count=0;
    float a;
    pilha *p = (pilha*)malloc(sizeof(pilha));
    iniciapilha(p);

    scanf("%s",&entrada);

    for(count=0 ; entrada[count] != '\0' ; count++){
        if(entrada[count]!='/' && entrada[count]!='*' && entrada[count]!='-' && entrada[count]!='+'){
            scanf("%f",&a);
            insere_na_pilha(p,a);
        }
    }

    imprimir(p);

    return 0;


}

 

  • Solução
Postado
3 horas atrás, Thiago Rosario disse:





typedef struct{
    float numero[MAXTAM];
    int topo;
}pilha;
***
void imprimir(pilha *p){
  int i=0;  for(i=0;i<=p->topo;i++)  printf("\n%d",p->numero[i]);
};

 

Lembre-se que a categoria de dado 'primitivo' no cerne da pilha ('stack') é, atualmente, um escalar de flutuante ('float') então o especificador na função   'printf'   da biblioteca padrão também precisa do tipo designado para um item desse escalar ("float"). Logo sua incoerência na implementação  imprimir  é utilizar  "máscara" de inteiro decimal (%d) invés de flutuante decimal (??).

 

struct Pilha {
    int topo; float itens [MAXTAM];
};
***
int imprimir(struct Pilha *p){
  int i= 0;
  for(i= 0;i <= p->topo; i++)
		printf("\n%??", (p->numero)[i]);
return i;
}

 

 

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...