Ir ao conteúdo
  • Cadastre-se

C Problema com lista encadeada está dando erro


Geisla Carvalho

Posts recomendados

Algúem que possa me ajudar a encontrar o erro?

 

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

#include <conio.h>

#include <ctype.h>

 

 

#define max 100

#define col 50

 

 

typedef struct endereco

{

        char nome[30];

        char fone[17];

        char email[80];

        char rua[40];

        int numero;

        char bairro[50];

        char cidade[30];

        char sigla_estado[3];

        char cep[8];

        int dia;

        int mes;

        int ano;

 

}Tpessoa;

 

 

void inclusao(void);

void Listar(void);

void quick_struct(int);

void qs_struct(int,int);

void ordenar(void);

void pesquisar(void);

char Validaresp();

void imprimir(void);

 

static int qtd = 0;

 

Tpessoa Tab[100];

FILE *fp;

 

void inclusao(void){

     int total = 0, retorno;

     char op = 's';

 

     if ((fp = fopen("endereco.db", "a")) == NULL)

     {

        printf ("O arquivo da lista não pode ser aberto!\n");

        printf ("Insira dados!\n");

        getch();

        exit(1);

     }

     while ((total < 100) && (op == 's'))

     {

           printf ("Digite o nome: ");

           gets(Tab[total].nome);

           printf ("Digite o fone: ");

           gets(Tab[total].fone);

           printf ("Digite o E-mail: ");

           gets(Tab[total].email);

           printf ("Digite a rua: ");

           gets(Tab[total].rua);

           printf ("Digite o numero de sua residencia:");

           gets(Tab[total].numero);

           printf ("Digite o bairro:");

           gets(Tab[total].bairro);

           printf ("Digite a cidade:");

           gets(Tab[total].cidade);

           printf ("Digite a sigla do Estado:");

           gets(Tab[total].sigla_estado);

           printf ("Digite o cep:");

           gets(Tab[total].cep);

 

           retorno = fwrite (&Tab[total], sizeof(struct endereco) ,1,fp);

 

           if (retorno == 1) {

               printf(" \n Gravacao ok ! ");

           }

           total++;

           op = Validaresp();

           qtd++;

     }

     fclose (fp);

}

char Validaresp() {

   char op;

   do {

      printf(" \n Deseja inserir novos dados? [S ou N] ? " );

      op = getch();

      printf("\n" );

   } while (op != 's' && op != 'n');

   return op;

}

void ordenar(void){

 

     Tpessoa vet;

     int aux,i,j,k,retorno;

     char *str, *str2, *straux;

 

         aux = qtd;

         for ( i = 0 ; i < aux ; i++ ){

               str = Tab.nome;

               for ( j = i+1 ; j < aux ; j++ ){

                   str2 = Tab[j].nome;

                   if ( strcmp ( str, str2 ) > 0 ){

                        vet = Tab;

                        Tab = Tab[j];

                        Tab[j] = vet;

                   }

               }

         }

 

 

    void ordenar(void){

 

     Tpessoa vet;

     int aux,i,j,k,retorno;

     char *str, *str2, *straux;

 

         aux = qtd;

         for ( i = 0 ; i < aux ; i++ ){

               str = Tab.dia;

               for ( j = i+1 ; j < aux ; j++ ){

                   str2 = Tab[j].dia;

                   if ( strcmp ( str, str2 ) > 0 ){

                        vet = Tab;

                        Tab = Tab[j];

                        Tab[j] = vet;

                   }

               }

         }

 

void ordenar(void){

 

     Tpessoa vet;

     int aux,i,j,k,retorno;

     char *str, *str2, *straux;

 

         aux = qtd;

         for ( i = 0 ; i < aux ; i++ ){

               str = Tab.mes;

               for ( j = i+1 ; j < aux ; j++ ){

                   str2 = Tab[j].mes;

                   if ( strcmp ( str, str2 ) > 0 ){

                        vet = Tab;

                        Tab = Tab[j];

                        Tab[j] = vet;

                   }

               }

         }

 

 

     remove("endereco.db");

     if ((fp = fopen("endereco.db", "w+")) == NULL){

        printf ("ERRO!\n");

        getch();

        exit(1);

     }

     for ( k = 0 ; k < aux ; k++ ){

           retorno = fwrite (&Tab[k], sizeof(struct endereco) ,1,fp);

           if (retorno != 1) {

               printf(" \n ERRO ! ");

           }

     }

     fclose(fp);

     printf("\n Lista Ordenada! \n");

     getch();

}

void pesquisar(void){

     int indice = 0, retorno = 1, cont = 0;

     char nome[80],op;

 

     if ((fp = fopen("endereco.db", "r")) == NULL){

     printf ("O arquivo da lista não pode ser aberto!\n");

     printf ("Insira dados!\n");

     getch();

     exit(1);

     }

     printf ("Digite o nome: ");

     gets(nome);

 

     retorno = fread(&Tab[indice], sizeof(struct endereco), 1, fp);

 

        while (retorno == 1){

            if (strcmp(nome, Tab[indice].nome) == 0 ){

printf("\nNome..: %s\nFone..: %s\nE-mail..:%s\nrua..:%s\numero..: %s\nbairro..:%s\ncidade...%s\nsigla_estado..:%s\ncep ..:%s\n",nome,Tab[indice].fone,Tab[indice].email,Tab[indice].rua,Tab[indice].numero,Tab[indice].bairro,Tab[indice].cidade,Tab[indice].sigla_estado,Tab[indice].cep);

            cont++;

            }

            indice++;

            retorno = fread(&Tab[indice], sizeof(struct endereco), 1, fp);

        }

        if(cont == 0){

                     printf("Nao existe contatos com este nome!\n");

                     }

        getch();

        fclose(fp);

   }

   void pesquisarfone(void){

     int indice = 0, retorno = 1, cont = 0;

     char fone[80],op;

 

     if ((fp = fopen("endereco.db", "r")) == NULL){

     printf ("O arquivo da lista não pode ser aberto!\n");

     printf ("Insira dados!\n");

     getch();

     exit(1);

     }

     printf ("Digite o telefone: ");

     gets(fone);

 

     retorno = fread(&Tab[indice], sizeof(struct endereco), 1, fp);

 

        while (retorno == 1){

            if (strcmp(fone, Tab[indice].fone)==0){

            printf ("\nNome ..: %s\nFone ..: %s\nE-mail ..: %s\n", Tab[indice].nome, Tab[indice].fone, Tab[indice].email);

            cont++;

            }

            indice ++;

            retorno = fread(&Tab[indice], sizeof(struct endereco), 1, fp);

        }

        if(cont == 0){

                     printf("Nao ha contatos com este Telefone!\n");

                     }

        getch();

        fclose(fp);

   }

   void pesquisaremail(void){

     int indice = 0, retorno = 1, cont =0;

     char email[80],op;

 

     if ((fp = fopen("endereco.db", "r")) == NULL){

     printf ("O arquivo da lista não pode ser aberto!\n");

     printf ("Insira dados!\n");

     getch();

     exit(1);

     }

     printf ("Digite o E-mail: ");

     gets(email);

 

    retorno = fread(&Tab[indice], sizeof(struct endereco), 1, fp);

 

        while (retorno == 1){

            if (strcmp(email, Tab[indice].email)==0){

            printf("\nNome..: %s\nFone..: %s\nE-mail..: %s\nrua..: %s\nnumero..: %s\nbairro..: %s\ncidade... %s\nsigla_estado..: %s\ncep ..: %s\n",

Tab[indice].nome, Tab[indice].fone, Tab[indice].email, Tab[indice].rua, Tab[indice].numero, Tab[indice].bairro, Tab[indice].cidade, Tab[indice].sigla_estado, Tab[indice].cep);

            cont++;

            }

            indice ++;

            retorno = fread(&Tab[indice], sizeof(struct endereco), 1, fp);

        }

        if(cont == 0){

                     printf("Nao existe contatos com este Email!\n");

                     }

        getch();

        fclose(fp);

   }

  void Listar(void){

int i = 0, retorno;

 

    if ((fp = fopen("endereco.db", "r")) == NULL)

    {

    printf ("O arquivo da lista não pode ser aberto!\n");

    printf ("Insira dados!\n");

    getch();

    exit(1);

    }

 

    retorno = fread(&Tab, sizeof(struct endereco), 1, fp);

    while ( retorno == 1) {

      printf("\n Nome ..: %s",   Tab.nome);

      printf("\n Fone ..: %s",   Tab.fone);

      printf("\n E-mail ..: %s\n",   Tab.email);

      printf ("\n Rua ..: %s\n", Tab.rua);

      printf ("\n Numero ..: %s\n", Tab.numero);

      printf ("\n Bairro ..: %s\n", Tab.bairro);

      printf ("\n Cidade..: %s\n", Tab.cidade);

      printf ("\n Sigla do estado ..: %s\n", Tab.sigla_estado);

      printf ("\n cep ..: %s\n", Tab.cep);

      i++;

      retorno = fread(&Tab, sizeof(struct endereco), 1, fp);

      }

      printf(" \n\n %d Contatos salvos!\n", i);

      getch();

      fclose(fp);

}

void menu(void){

char op;

int teste;

 

if ((fp = fopen("endereco.db", "r")) != NULL){

        qtd = 0;

        do {

             teste = fread(&Tab, sizeof(struct endereco), 1, fp);

             qtd++;

        }while ( teste == 1 );

        qtd--;

}

 

do{

system("cls");

printf("\n(1)Incluir\n(2)Listar\n(3)Ordenar por nome\n(4)Pesquisar por nome\n");

printf("(5)Pesquisar por fone\n(6)Pesquisar por E-mail\n(7)Pesquisar por mes de aniversario\n");

printf("(8) Pesquisar por dia de aniversario\n(9)Qualquer outra tecla para sair\n\n");

op = getch();

switch(op){

case '1':

     inclusao();

break;

case '2':

     Listar();

break;

case '3':

     ordenar();

break;

case '4':

     pesquisar();

break;

case '5':

     pesquisarfone();

break;

case '6':

     pesquisaremail();

break;

case '7':

    pesquisarmesdeaniversario();

break;

case '8':

    pesquisardiadeaniverasario();

break;

default:

exit(1);

}

}while (op < '9');

}

 

int main (){

 

    int var;

 

    printf("\n\n\n\n\n\n\n\n\n\n");

    printf("                  .::AGENDA DE TELEFONES:.  \n\n");

    printf("  Veja todas as funcoes disponiveis no menu   \n");

    printf("  use os numeros para selecionar a opcao desejada  \n");

    printf("  pressione qualquer tecla para continuar ou ESC para sair do programa agora.");

    var=getch();

    if(var == 27){ exit(1);}

menu();

system("pause");

}

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois...

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...