Ir para conteúdo

POWERED BY:

Arquivado

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

Lucas Souza Reis

Ordenação de Registro em C

Recommended Posts

Boa noite galera! ^^

Minha primeira postagem aqui no fórum. Enfim, estou fazendo um trabalho da faculdade e preciso classificar uma struct em ordem alfabética. A struct é simples, só tem nome e idade. Depois que eu faço a classificação usando o código abaixo, as posições ficam sem valor algum, como se estivessem "vazias". O código é muito grande, por isso vou postar só um trecho do código. Obrigado! (:

 

 

void classificar ()
{
     system("cls");
     if (cont > 0)
     {                  
         printf ("Deseja classificar por nome ou idade? ");
         fflush (stdin); gets(resp2);  
         if ((strcmp(resp2, "nome")==0) || (strcmp(resp2, "idade")==0))
         {
              for (i=0; i<=48; ++i)
              {
                  for (j=i+1; j<=49; ++j)
                  {
                      if (strcmp (resp2, "nome") ==0)
                      {
                                 if (strcmp(cad[i].nome, cad[j].nome) ==1 )
                                 {                                 
                                      strcpy (x.nome, cad[i].nome);
                                      strcpy (cad[i].nome, cad[j].nome);
                                      strcpy (cad[j].nome, x.nome);
                                      
                                      x.idade = cad[i].idade;
                                      cad[i].idade = cad[j].idade;
                                      cad[j].idade = x.idade;
                                    
                                 }                                                                  
                      }                      
                      else
                      {
                          if (cad[i].idade > cad[j].idade)
                          {
                                      strcpy (x.nome, cad[i].nome);
                                      strcpy (cad[i].nome, cad[j].nome);
                                      strcpy (cad[j].nome, x.nome);
                                      
                                      x.idade = cad[i].idade;
                                      cad[i].idade = cad[j].idade;
                                      cad[j].idade = x.idade;
                          }                          
                      }
                  }
              }
              system ("cls");
              printf ("A classifica%c%co foi feita com sucesso! \nOs administrativos foram cadastrados por %s", 135, 198, resp2);
              chamadaMenu ();
         }
         else
         {
             printf ("\n\nO comando %s %c um comando inv%clido!", resp2, 130, 161);
             chamadaMenu ();
         }
         
     }
     else
         semAdministrativos ();
     chamadaMenu ();
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tire o fflush(stdin).

Tire o gets e use fgets.

Não use system.

Existe um tópico fixo sobre isso aqui mesmo.

 

 

printf ("\n\nO comando %s %c um comando inv%clido!", resp2, 130, 161);

Vc está programando em que ambiente p/ precisar usar códigos de caracteres acentuados?

 

Se a função classificar só ordena a lista, por que existe uma chamada a uma função de exibição de menu dentro dela? Isso se faz no loop principal do programa.

 

Onde está definida a variável resp2? Evite usar variáveis globais. E quanto a x e cad?

 

Se a variável cont indica a quantidade de registros, por que vc está usando números fixos (48,49)?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pela resposta amigo! ^^
Então, sou novato na área ainda, programo nem há um mês e este é só um exercício da faculdade mesmo, ele está em uma lista com outros exercícios. O programa precisa só rodar no cmd msm, é que a professora gosta das coisas detalhadas e bem feitas, por isso usei os códigos de caracteres acentuados. A função classificar realmente só classifica, mas como disse, sou novato e você tem razão, não há necessidade de system("cls"); e nem de chamada pra menu. A variável resp2, x e cad são variáveis globais, eu estou usando porque é um requisito do exercício, mas obrigado pela dica (:. Tem algum tópico aqui no fórum falando sobre o uso de variáveis globais? Estou usando os números fixos porque no exercício é necessário o cadastro de 50 administrativos. Eu uso a variável cont só para saber se há pelo menos algum administrativo cadastrado. Ex: A pessoa querer listar um administrativo ativo (função que pede no ex.) sem antes cadastrar. Obrigado pela atenção (:

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

 

O programa precisa só rodar no cmd msm, é que a professora gosta das coisas detalhadas e bem feitas, por isso usei os códigos de caracteres acentuados.

 

Usar constantes mágicas não é fazer a coisa bem-feita. Isso é uma prática ruim de programação. Escreva direto o caractere. O terminal do windows é que não tem utf-8 como charset padrão.

 

O exercício pode pedir 50 registros como limite, mas se vc tiver 10, eventualmente você vai copiar lixo das outras posições.

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.