Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

andresoares

[Resolvido] Organizando uma struct em ordem alfabetica

Recommended Posts

Bom galera sou novo no forum e novo tambem na area de programaçao estou estudando programação na faculdade e estou colocando em prática o que aprendo com os professores só que nao estou conseguindo fazer uma ordenação de uma struct por ordem alfabetica, vou postar aqui o codigo e espero que tenha alguem aqui que possa me ajudar. :D

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

struct cadastro
{
      char nome[40];
      char endereco[40];
      char telefone_fixo[40];
      char telefone_celular[40];
};

main ()
{
     struct cadastro agenda[1000];
     int opcao,c,b,d,sair,i;
     char pesquisa[40],x[40];
     sair = 0;
     i = 0;
     do {
     printf ("Escolha uma opcao abaixo.\n");
     printf ("1. Cadastrar novo contato\n");
     printf ("2. Pesquisar por um contato\n");
     printf ("3. Listar todos os contatos\n");
     printf ("4. sair\n");
     scanf ("%d", &opcao);
     system ("CLS");
     if (opcao==1)
     {
                  i=i+1;
                  printf ("Informe o nome da pessoa: ");
                  fflush (stdin);fgets (agenda[i].nome,40,stdin);
                  printf ("Informe o seu endereco: ");
                  fflush (stdin);fgets (agenda[i].endereco,40,stdin);
                  printf ("Informe o seu telefone fixo: ");
                  fflush (stdin);fgets (agenda[i].telefone_fixo,40,stdin);
                  printf ("Informe o seu telefone_celular: ");
                  fflush (stdin);fgets (agenda[i].telefone_celular,40,stdin);
     }
     
     if (opcao==2)
     {
                  printf ("Informe o nome de quem deseja pergunta: ");
                  fflush (stdin);fgets (pesquisa,40,stdin);
                  for (b=0;b<=1000;b++)
                  if (strcmp (agenda[b].nome,pesquisa)==0)
                     {
                             printf ("Nome: %s\n", &agenda[b].nome);
                             printf ("Endereco: %s\n", &agenda[b].endereco);
                             printf ("Telefone fixo: %s\n", &agenda[b].telefone_fixo);
                             printf ("Telefone celular: %s\n", &agenda[b].telefone_celular);
                     }
     }
     
     if (opcao==3)
     {
                  for (c=0;c<=1000;c++)
                          if (strcmp(agenda[c].nome,agenda[c+1].nome)>0)
                             {
    troca[c] = agenda[c];
    agenda[c] = agenda[c+1];
    agenda [c+1] = troca[c];
                             }
                  for (c=0;c<=1000;c++)
                      {
                             printf ("Nome: %s\n", &agenda[c].nome);
                             printf ("Endereco: %s\n", &agenda[c].endereco);
                             printf ("Telefone fixo: %s\n", &agenda[c].telefone_fixo);
                             printf ("Telefone celular: %s\n", &agenda[c].telefone_celular);
                      }
     }
     if (opcao==4)
     {
        sair = 1;
     }
     } while (sair == 0);
}                     

bom galera, agradeço a todos que puderem me ajudar, ja tentei fazer usando o strcpy só que tambem não funcionou, se alguem puder me explicar o que de errado estou fazendo ou como usar o strcpy de modo certo eu agradeceria muito.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá,

 

Seja mais específico na sua dúvida, poste apenas a parte de código que seja relevante ao problema.

Compartilhar este post


Link para o post
Compartilhar em outros sites

VictorCacciari - primeiro obrigado por editar o meu post, depois que postei que vi o erro...rsrs...

bom a parte do codigo que esta com problema é essa daqui:

 for (c=0;c<=1000;c++)
                          if (strcmp(agenda[c].nome,agenda[c+1].nome)>0)
                             {
    troca[c] = agenda[c];
    agenda[c] = agenda[c+1];
    agenda [c+1] = troca[c];
                             }

quitZAUMMM -> teria como mi dar um exemplo aplicado em algum codigo? meu ingles é péssimo entao nao entendi nada, consigo aprender mais com um exemplo, isso se for possivel.

 

_Isis_ -> estarei verificando aqui no forum. obrigado pela informação.

Compartilhar este post


Link para o post
Compartilhar em outros sites

fiz alguns testes somente, + acho q ta ordenando certo:

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

typedef struct{
        char sNome[255];
}Jogadores;

Jogadores jPlayers[5];

void ordenaNomes(int tamanho){
    char sNomeAux[255];
    for( int i = 1; i < tamanho; i++ ) {
        for( int j = i; j > 0; j-- ) {
            if( strcoll(jPlayers[j].sNome, jPlayers[j-1].sNome) < 0){
              strcpy(sNomeAux,jPlayers[j].sNome);
              strcpy(jPlayers[j].sNome,jPlayers[j-1].sNome);
              strcpy(jPlayers[j-1].sNome,sNomeAux);}
        }
    }
}

int main(){
    int i;
    for(i=0;i<5;i++) {
        printf("Nome: ");
        scanf("%s%*c", jPlayers[i].sNome);
    }
    ordenaNomes(5);
    for (i = 0; i < 5; i++) printf("%s\n", jPlayers[i].sNome);
    return 0;
}

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

fiz alguns testes somente, + acho q ta ordenando certo:

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

typedef struct{
        char sNome[255];
}Jogadores;

Jogadores jPlayers[5];

void ordenaNomes(int tamanho){
    char sNomeAux[255];
    for( int i = 1; i < tamanho; i++ ) {
        for( int j = i; j > 0; j-- ) {
            if( strcoll(jPlayers[j].sNome, jPlayers[j-1].sNome) < 0){
              strcpy(sNomeAux,jPlayers[j].sNome);
              strcpy(jPlayers[j].sNome,jPlayers[j-1].sNome);
              strcpy(jPlayers[j-1].sNome,sNomeAux);}
        }
    }
}

int main(){
    int i;
    for(i=0;i<5;i++) {
        printf("Nome: ");
        scanf("%s%*c", jPlayers[i].sNome);
    }
    ordenaNomes(5);
    for (i = 0; i < 5; i++) printf("%s\n", jPlayers[i].sNome);
    return 0;
}

[]s

 

Amigo MUITO OBRIGADO, deu certo, rsrs, obrigado pela paciencia e ainda poder me mostrar um exemplo do strcoll.

Obrigado a todos que puderam me ajudar no tópico e pelas dicas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.