Ir para conteúdo

Arquivado

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

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");
}

Compartilhar este post


Link para o post
Compartilhar em outros 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.

Compartilhar este post


Link para o post
Compartilhar em outros 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?

Compartilhar este post


Link para o post
Compartilhar em outros 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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por Boca
      Pessoas estou com uma duvida preciso de ajuda
      Tenho alguns campos chamados "horario_0, horario_1, horario_2, horario_3, horario_4, horario_5, horario_6 no meu banco de dados
      estou precisando que ela seja dinâmica dentro de um for
      exemplo:
       
      <?php for ($dia = 0; $dia < 7; $dia++): $resultadoBD->horario_$dia endfor; ?>  
    • Por EstilloWeb
      Está ocorrendo um erro em meu comando MySQL na ordenação dos resultados. O código é o seguinte:
      $sql_imos4 = "Select DISTINCT imovel FROM propostas ORDER BY id DESC"; $exe_imos4 = mysqli_query($conexao, $sql_imos4); O objetivo é listar uma única vez um imóvel com proposta, mesmo que haja dois ou mais registros, sempre ordenado mais recente. O que está ocorrendo quando o imóvel tem mais de uma proposta cadastrada, a ordenação está sendo feita pelo ID da proposta mais antiga.
      Exemplo:
      imóvel ref. 4528 tem duas propostas, sendo que a mais recente tem o ID 235 porém aparece na listagem abaixo do imóvel ref. 4325, que tem uma só proposta e ID 230.
      O resultado deveria estar invertido neste caso.
      Onde pode estar o erro? Agradeço a ajuda.
    • Por 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? 
       
    • Por 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á.
×

Informação importante

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