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

organizando uma struct em ordem alfabética


sarahbortoloti

Pergunta

Boa noite !

Faço Ads e estou resolvendo uma lista de struct para a aula.

Fiz um exercicío simples de cadastro , alocação dinâmica e impressão , só que ele n está dando certo , pois a impressão deve ser feita em ordem alfabética e eu fiz pelo algoritmo bubble sort só que n está ordenando , será que alguém poderia dar uma olhada e ver o que tem de errado o porque de não estar ordenando ?


#include<stdio.h>
#include<stdlib.h>
#include<locale.h>
#include<string.h>
#define X 3
  
 typedef struct pessoa
 {
 char nome[40];
 char endereco[100];
 char telefone[13];
 
 //struct definida;
 };
 
 void preenche(pessoa *p) ;
 void mostra(pessoa *p);
 void bublesort(pessoa *p);
 int main() // programa principal;
 {    
  setlocale(LC_ALL,"portuguese");
  pessoa *p=NULL; // iguala a Null para inicializar o ponteiro p;
  p=(pessoa*)malloc(sizeof(pessoa)*X); // alocação dinâmica;
  int a;
  
  for(a=0;a<(X);a++)
  {
  preenche(&p[a]); // acessa diretamente o end de *p;
  }
  
bublesort(p); // ordena struct
mostra(p);

}

 
 void preenche(pessoa *p) 
 {    
    char lixo[2]; // limpa o buffer;
     printf("Insira seu nome \n");
     scanf("%s",p->nome);
gets(lixo);
    printf("Insira cidade,bairro, rua e nº\n");
     gets(p->endereco);
     printf("Insira O DDD e em seguida seu telefone\n");
     gets(p->telefone);
gets(lixo); //limpa
 system("cls");
 }
 
void mostra(pessoa *p)
{
    int a;
    for(a=0;a<X;a++)
    {
        printf("Nome %s \n ",p->nome);
        printf("Endereço %s \n",p->endereco);
        printf("Tel : %s\n",p->telefone);
p++;    
        // imprime a struct;
    }
}


void bublesort(pessoa *p)
{    pessoa aux; 
    int i, j;
    for ( i=X-1; i > 0; i-- )
    {
            for ( j=0; j < i; j++ )
            {

                if (strcmp (p[j].nome , p[j+1].nome )<0)
                {
                    strcpy(aux.nome,p[j].nome);
                    strcpy(aux.endereco,p[j].endereco);
                    strcpy(aux.telefone,p[j].telefone);
                     
                    strcpy(p.nome,p[j].nome);
                    strcpy(p.endereco,p[j].endereco);
                    strcpy(p.telefone,p[j].telefone);
                     
                    strcpy(p[j].nome,aux.nome);
                    strcpy(p[j].endereco,aux.endereco);
                    strcpy(p[j].telefone,aux.telefone);
                     

                 }
            }

     }
}

 

Link para o comentário
Compartilhar em outros sites

1 resposta 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.

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...