Ir ao conteúdo
  • Cadastre-se
Samaroni Ramos Campelim

C Imprimir string na telas

Posts recomendados

Boa noite estou com este trabalho sobre pilhas em C, em que tenho que ler strings a partir do teclado e empilhar, mostrar na tela e  também desempilhar. Não estou conseguindo exibir todas as strings digitadas o programa esta imprimindo duas vezes a ultima string digitada somente, alguém pode me dar uma luz?

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

#define MAX 2

// Variaveis declaradas aqui são visiveis por todas as funções
int stack[MAX];
int top = 0;
int i;

struct site{
char endereco[100];

};

//Insere um item na pilha
void push (endereco) {
if (top >= MAX) {
    printf("Pilha cheia.\n");
}
   for(i=0;i<MAX;i++){
    printf("Informe o endereco: ");
    gets(endereco);
stack[top] = endereco;
top++;

}
}

//Remove um item da pilha (o ultimo que entrou)
int pop (int *dado) {
if (top <= 0) {
    printf("Pilha vazia.\n");
    return -1;
}
top --;
*dado = stack[top];
return 0;
}


//Mostra o conteúdo da pilha
void showStack (endereco) {


if (top < 0){
    printf("Pilha vazia.\n");


}

printf("Pilha:\n");
for(i=0;i<top;i++){
printf("%s",stack);
}
printf("\n\n");
}

int main(){

    struct site site1;
    push(site1.endereco);

    showStack(site1.endereco);

    return 0;
} 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

stack[top] é um vetor de inteiros e endereço é um vetor de chats? E você tenta atribuir um vetor de chats a um vetor de inteiros? Acho que você não entendeu muito bem o conceito de vetores.

Para que você tenha uma pilha de strings(vetor de chars) você precisa de uma matriz, e não um vetor. O mais próximo do que você quer fazer seria isso:
 

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

#define MAX 5
#define TAM 100

char pilha[MAX][TAM] = {0}; //pilha de 5 strings de 100 caracteres cada. Ou seja... podemos empilhar 5 objetos(frases) de até 100 letras cada. Isso contando com que MAX tenha um valor de 5 claro
int top = 0;

//Empilha um elemento até que a pilha esteja cheia. Se estiver cheia mostra um aviso"Pilha Cheia!"
void empilhar ( char umaFrase[TAM] ) {
    if ( top < MAX ) {
        strcpy ( pilha[top], umaFrase );
        top++;
        printf("Empilahndo \"%s\" na posicao %d da pilha.\n\n", umaFrase, top);
    }else{
        printf("Erro: Pilha Cheia! Tentou empilhar \"%s\" na posicao %d que nao se permite.\n\n", umaFrase, MAX+1);
    }
}

//Imprime a pilha de abaixo para cima si a pilha não estiver vazia. Caso contrario, se a pilha estiver vazia, mostra "Pilha Vazia"
void imprimirPilha() {
    int i;
    if(top != 0){
        printf("Conteudo da pilha:\n");
        for ( i = top-1; i >= 0 ; i-- ) {
            printf ( "\"%s\"\n", pilha[i] );
        }
        putchar('\n');
    }else{
        printf("Conteudo da pilha:\n");
        printf("Vazia!\n\n");
    }
}

//Desempilha um elemento. Caso não tenha nada mais que desempilhar mostra um aviso
void desempilhar() {
    int i;
    
    if ( top > 0 ) {
        printf("Desempilhar posicao %d da pilha. Continha \"%s\"\n\n", top, pilha[top-1]  );
        for ( i = 0; i < TAM ; i++ ) {
            pilha[top-1][i] = 0;
        }
        top--;
    }else{
        printf("Erro: Tentando desempilhar pilha vazia\n\n");
    }
}

int main() {
    //Empilhamos 2 elementos e mostramos
    empilhar ( "frase 1" );
    empilhar ( "frase 2" );
    imprimirPilha();
    
    //Eliminamos 1 elemento e mostramos
    desempilhar();
    imprimirPilha();
    
    //Eliminamos mais 2 elementos. LOGICO QUE VAI DAR ERRO pois somente resta 1 elemento na pilha. Ao tentar 
    //eliminar o segundo, mostra um aviso de que não resta elementos para desempilhar. Logo mostra a pilha vazia.   
    desempilhar();
    desempilhar(); //<- vai mostrar um aviso de que a pilha esta vazia. Não faz sentido desempilhar elementos que n existem
    imprimirPilha();
    
    //Tentamos estourar a pilha
    empilhar ( "frase 1" );
    empilhar ( "frase 2" );    
    empilhar ( "frase 3" );
    empilhar ( "frase 4" );
    empilhar ( "frase 5" );
    empilhar ( "frase 6" ); //Este elemento estora a pilha. Mostra aviso "Pilha Cheia"
    imprimirPilha();    
}

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro 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 publicações 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...

GRÁTIS: minicurso “Como ganhar dinheiro montando computadores”

Gabriel TorresGabriel Torres, fundador e editor executivo do Clube do Hardware, acaba de lançar um minicurso totalmente gratuito: "Como ganhar dinheiro montando computadores".

Você aprenderá sobre o quanto pode ganhar, como cobrar, como lidar com a concorrência, como se tornar um profissional altamente qualificado e muito mais!

Inscreva-se agora!