Ir ao conteúdo
  • Cadastre-se
Gegê Carvalho

C Problema com lista encadeada está dando erro

Recommended Posts

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

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Gegê Carvalho Olá!

image.png.1001bacdb3d455e6863511e71ffad494.png

Assim você aumenta o entendimento do seu código.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro 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 publicações 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

×