brunonoia 0 Denunciar post Postado Outubro 24, 2015 Comecei a fazer esta agenda o programa compila e grava os cadastros normalmente mas quando eu vou na opção listar os cadastros o nome desaparece se alguem puder me dizer como resolver grato. #include <stdio.h>#include <string.h>#include <stdlib.h>#include <conio.h>#include <ctype.h>typedef struct dados{ char endereco[80]; char cidade[80]; char estado[2]; char nome[80]; char profissao[30];char nascimento[15];char bairro[30];}T_dados; T_dados d[300];// prototiposvoid inclusao(void);void Listar(void);void quick_struct(int);void qs_struct(int,int);void ordenar(void);void pesquisar(void);char Validaresp();static int qtd = 0;FILE *fp;// =================================================================// ======Incluir dados no arquivo ==================================void inclusao(void){ int total = 0, retorno; char op = 's'; if ((fp = fopen("agenda.db", "a")) == NULL) { printf ("O arquivo da lista não pode ser aberto!\n"); printf ("Insira dados!\n"); getch(); exit(1); } while ((total < 300) && (op == 's')) { printf ("Digite o nome: "); gets(d[total].nome); printf ("Digite o endereco: "); gets(d[total].endereco); printf ("Digite a cidade: "); gets(d[total].cidade); printf ("Digite a UF do estado: "); gets(d[total].estado); printf ("Digite a profissao: "); gets(d[total].profissao); printf("Digite o bairro: "); gets(d[total].bairro); printf("Digite a data de nascimento:"); gets(d[total].nascimento); retorno = fwrite (&d[total], sizeof(struct dados) ,1,fp); if (retorno == 1) { printf(" \nGravacao ok ! "); } total++; op = Validaresp(); qtd++; } fclose (fp);}//======================================================================// ======Valida resposta ===============================================char Validaresp() { char op; do { printf(" \nDeseja inserir novos dados? [s ou N] ? " ); op = getch(); printf("\n" ); } while (op != 's' && op != 'n'); return op;}//======================================================================// ======Organizar em ordem alfabetica =================================void ordenar(void){ T_dados vet; int aux,i,j,k,retorno; char *str, *str2, *straux; if ((fp = fopen("agenda.db", "w+")) == NULL){ printf ("ERRO!\n"); getch(); exit(1); } aux = qtd; // aux recebe a quantidade de contatos inscritos for ( i = aux ; i <0 ; i-- ){ str = d.nome; for ( j = i-1 ; j <=0 ; j-- ){ str2 = d[j].nome; if ( strcmp ( str, str2 )> 0 ){ vet = d; d = d[j]; d[j] = vet; } } } for ( k = 0 ; k < aux ; k++ ){ retorno = fwrite (&d[k], sizeof(struct dados) ,1,fp); if (retorno != 1) { printf(" \nERRO ! "); } } fclose(fp); printf("\nLista Ordenada! \n"); getch();}//======================================================================// ======Pesquisar pelo nome ===================================void pesquisar(void){ int indice = 0, retorno = 1, cont = 0; char nome[80],op; if ((fp = fopen("agenda.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(&d[indice], sizeof(struct dados), 1, fp); while (retorno == 1){ if (strcmp(nome, d[indice].nome) == 0 ){ printf ("\nNome ..: %s\nEndereco ..: %s\nCidade ..: %s\nEstado..:%s\nProfissao..:%s\nNascimento..:%s\nBairro..:%s", d[indice].nome, d[indice].endereco, d[indice].cidade,d[indice].estado,d[indice].profissao,d[indice].nascimento,d[indice].bairro); cont++; } indice++; retorno = fread(&d[indice], sizeof(struct dados), 1, fp); } if(cont == 0){ printf("Nao ha contatos com este nome!\n"); } getch(); fclose(fp); }//======================================================================// ======Pesquisar Nascimento ============================================void pesquisarnascimento(void){ int indice = 0, retorno = 1, cont = 0; char nascimento[15],op; if ((fp = fopen("agenda.db", "r")) == NULL){ printf ("O arquivo da lista não pode ser aberto!\n"); printf ("Insira dados!\n"); getch(); exit(1); } printf ("Digite o nascimento: "); gets(nascimento); retorno = fread(&d[indice], sizeof(struct dados), 1, fp); while (retorno == 1){ if (strcmp(nascimento, d[indice].nascimento)==0){ printf ("%s\nNome ..: %s\nEndereco ..: %s\nCidade ..: %s\nEstado..:%s\nProfissao..:%s\nNascimento..:%s\nBairro..:", d[indice].nome, d[indice].endereco, d[indice].cidade,d[indice].estado,d[indice].profissao,d[indice].nascimento,d[indice].bairro); cont++; } indice ++; retorno = fread(&d[indice], sizeof(struct dados), 1, fp); } if(cont == 0){ printf("Nao ha contatos com este Nascimento!\n"); } getch(); fclose(fp); }//======================================================================// ======Lista os contatos cadastrados =================================void Listar(void){int i = 0, retorno; if ((fp = fopen("agenda.db", "r")) == NULL) { printf ("O arquivo da lista não pode ser aberto!\n"); printf ("Insira dados!\n"); getch(); exit(1); } retorno = fread(&d, sizeof(struct dados), 1, fp); // fread retorna a quantidade de itens ... while ( retorno == 1) { printf("\n Nome ..: %s", d.nome); printf("\n Endereco ..: %s", d.endereco); printf("\n Cidade ..: %s", d.cidade); printf("\n Estado ..: %s", d.estado); printf("\n Profissao ..: %s", d.profissao); printf("\n Nadcimento ..: %s", d.nascimento); printf("\n Bairro..:%s", d.bairro); i++; retorno = fread(&d, sizeof(struct dados), 1, fp); } printf(" \n\n %d Contatos salvos!\n", i); getch(); fclose(fp);}//======================================================================// ======Menu ==========================================================void menu(void){char op;int teste;if ((fp = fopen("agenda.db", "r")) != NULL){ qtd = 0; do { teste = fread(&d, sizeof(struct dados), 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 nascimento\n(6)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': pesquisarnascimento();break;default:exit(1);}}while (op < '6');}int main (){ int var; printf("\n\n\n\n\n\n\n\n\n\n"); printf(" .::AGENDA ELETRONICA:. \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