Jump to content
Sign in to follow this  
yuripinheiro1402

Erro com ordenação de alocação dinâmica

Recommended Posts

Bom dia pessoal,

 

Sou novo no fórum, li a respeito de algumas regras, mas posso estar fazendo algo errado, caso faça, me desculpem.

Estou com um problema num código que estou fazendo para fazer uma ordenação, porém, eu rodo ele e ele funciona, mas quando escolho a opção de ordenar, a tela só pisca, não entra nela.. Poderiam dar uma olhada pra ver o que estou fazendo de errado?

PS: Não se assustem com o tamanho do código rs, é apenas o ''Ordena'' que estou com dificuldades.

 

 

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

struct pasta {
       char nome[80];
       int codigo;
       struct pasta *proximo;
       struct pasta *anterior;
};

struct pasta *inicio, *ultimo, dados[1000];
int q=0;
int menu();

void listaligada (struct pasta *);
void cadastro();
void ordena();
void grava();
void abre();
void exclui();
void altera();
void lista();

main()
{
      int i;
      inicio = ultimo = NULL;
      
      for ( ; ; ) {
          i=menu();
          switch(i) {
                    case 1: cadastro();
                    break;
                    case 2: grava(); break;
                    case 3: abre(); break;
                    case 4: ordena(); break;
                    case 5: lista(); break;
                    case 6: exclui(); break;
                    case 7: altera(); break;
                    case 8: exit(1); break;
                    }
          }
}

int menu()
{
    int i;
    system("cls");
    printf("\t\tMenu\n\n");
    printf("\t1. Cadastro\n");
    printf("\t2. Grava\n");
    printf("\t3. Abre\n");
    printf("\t4. Ordena\n");
    printf("\t5. Lista\n");
    printf("\t6. Exclui\n");
    printf("\t7. Altera\n");
    printf("\t8. Sai\n");
    printf("\nEntre com a opcao: ");
    scanf("%d",&i);
    
    return i;
}

void listaligada (struct pasta *p) {
     if (inicio == NULL) {
                inicio = ultimo = p;
                p->proximo = NULL;  
                p->anterior = NULL;
                return;
     }
     ultimo->proximo = p;
     p->anterior = ultimo;
     p->proximo = NULL;
     ultimo = p;
   
     
}

void cadastro() {
    struct pasta *p;
     static int i=0;
     system("cls");
     printf("\t\tCadastro\n\n");
     printf("\tEntre com os dados. \nTecle apenas ENTER sobre o campo 'nome' sem digitar nada para sair:");
     
     for( ; ; ) {
             printf("\nNome %d:", i+1);
             p = (struct pasta *) malloc (sizeof(struct pasta));
             fflush(stdin);
             gets(p->nome);
            
             
             if(!p->nome[0])
                            break;
             p->codigo = ++i;
             listaligada(p);
         }
}

void ordena() {
    int i,j;
    struct pasta temp;
    system ("cls");
    printf("\n\t\tNomes ordenados:\n\n");
    for(i=0 ; i<q ; i++)
        for(j=i+1 ; j<q ; j++)
    
             if (dados[i].nome,dados[j].nome>0)
             {
             temp=dados[i];
             dados[i]=dados[j];
             dados[j]=temp;
             }
    
}
void grava() {}
void abre() {}
void exclui() {}
void altera() {}
void lista() {
     struct pasta *p;
     system ("cls");
     printf("\n\t\tLista\n\n");
     p = inicio;
     while (p!= NULL) {
           printf("\n%s", p->nome);
           printf("\nCodigo: %d", p->codigo);           
           p = p->proximo;
           printf("\n---------\n");       
     }
     system("pause");
}

Share this post


Link to post
Share on other sites

Tenta trocar o scanf por scanf("%d%*c", &opcao). Deve estar piscando porque está lendo um \n na entrada.

E não use fflush na entrada padrão nem gets.

Share this post


Link to post
Share on other sites

Tenta trocar o scanf por scanf("%d%*c", &opcao). Deve estar piscando porque está lendo um \n na entrada.

E não use fflush na entrada padrão nem gets.

 

Mas estou mexendo com strings, não teria que usar fflush e gets?

Share this post


Link to post
Share on other sites

Temos um tópico fixo sobre isso.

Gets é inseguro (assim como leitura de string com scanf sem delimitação de tamanho) e fflush na entrada padrão, segundo o ISO C, possui comportamento indefinido.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Similar Content

    • By recmarq
      Boa tarde,
       
      Eu tenho uma lista com vários itens, (P, M, G, 1, 2, 3, 4, 5, 6, 7, 8, 9).
      essa lista está desordenada e eu preciso ordenar por ordem alfabética e numérica, quando eu uso a ordenação de letras eu comparo com sinal de maior ">"
      exemplo = a > b
      Preciso ordena-los, alguém poderia me ajudar? 
       
    • By ment0r
      Boa tarde amigos, tudo bem? Mais uma vez venho pedir o auxilio de vocês. (Talvez da primeira vez eu tenha criado esse tópico no lugar errado)
       
      Bom, estou desenvolvendo um sistema intranet pra uma empresa (php + firebird) e nele haverá uma página de cadastro de pedido; nela, o usuário digita a data da compra, a data de vencimento e vai listando os produtos - bem simples.
       
      Minha dúvida é a seguinte: como eu faço pra pra inserir vários produtos na mesma página e depois cadastrar tudo de uma vez? Peguei como exemplo uma tela do sistema de um amigo (não pode ser copiado, pois foi desenvolvido em Delphi).
       

       
      O usuário escolhe um produto e insere na lista, escolhe outro e insere na lista e assim por diante. No final ele cadastra todos. Minha dúvida não é nos procedimentos de cadastros (funções de banco e etc) é em como fazer a aparecer essa lista de produtos.
       
      Será que é com Jquey, Javascript... enfim... me deêm uma luz rsrs
       
      Muito obrigado desde já.
    • By Mateus Cruz
      Galera, vamos lá, estou com um problemão para realizar a ordenação de alguns dados...
       
      Tenho uma tabela com 10 colunas de respostas (ds_answer[1...10])
      Esta coluna recebe valores A (Alta), M (Média);
       
      Preciso ordenar a view com os que contém mais A no top...
      Há algum meio? 
      Consegui apenas ordenar pelo que tivesse maior sequência de A...
       
       
       
    • By marcossantana10
      Queria saber se é possível alterar a ordem com que os subdiretórios de um diretório é listado. Exemplo:
       
      Tenho um diretório raiz que possuem os seguintes diretórios: 2013, 2014, 2015, [...].
      Tem como fazer com que eles sejam mostrados em uma ordem específica?
       
      Código que tô usando:
      $baseDir = 'diretorio/'.$dirDinamico; $abreDir = (@$_GET['dir'] != '' ? $_GET['dir'] : $baseDir); $strrdir = strrpos(substr($abreDir,0,-1),'/'); $backdir = substr($abreDir, 0,$strrdir+1); $openDir = dir($abreDir); while($arq = $openDir -> read()): if($arq != '.' && $arq != '..'): if(is_dir($abreDir.$arq)){ //aqui é a parte que organizo (visualmente) a exibição dos diretórios.  
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.