Ir para conteúdo
Fórum Script Brasil

sergio190986

Membros
  • Total de itens

    1
  • Registro em

  • Última visita

Sobre sergio190986

sergio190986's Achievements

0

Reputação

  1. Boa tarde. estou precisando muito de ajuda, estou desenvolvendo um trabalho de faculdade que utiliza vetor e estruturas para criar um arquivo, ele se baseia em um pequeno cadastro, consigo cadastrar vários registros de uma vez e caso eu mande listar todos que eu cadastrei na mesma vez(sem fechar o programa) ele lista corretamente, porém se eu abrir o programa e pedir que ele liste logo de cara ele só em volta o primeiro registro, será que alguém teria a solução para ele mostrar todos os registros ao invés de só o primeiro? segue meu código: #include<stdio.h> #include<stdlib.h> struct estrutura { char nome[30]; char end[20]; char cidade[20]; char estado[20]; char cep[10]; }; struct estrutura dados[10]; // matriz onde vão ficar as estruturas int i=0, a=0; //controladores FILE *fopen(),*p; //////////////////////escrita////////////////// cad_arq() { if((p = fopen("arq3.doc","w"))==NULL) { printf("erro na abertura do arquivo \n"); exit(0); } system("cls"); printf("Entre com o nome:"); fflush(stdin); // limpa o buffer do teclado porque não estava conseguindo fazer com scanf("%[^\n]",&dados[a].nome);//fgets, [^\n] permite o fgets continuar depois de um "espaço", assim não tem problema dele ler outra ver depois que você digita espaço printf("\n"); printf("Entre com o Endereço: "); fflush(stdin); scanf("%[^\n]",&dados[a].end);// grava no indice a, que começa com zero, então dados[0].end printf("\n"); printf("Entre com a cidade: "); fflush(stdin); scanf("%[^\n]",&dados[a].cidade); printf("\n"); printf("Entre com o estado: "); fflush(stdin); scanf("%[^\n]",&dados[a].estado); printf("\n"); printf("Entre com o CEP: "); fflush(stdin); scanf("%[^\n]",&dados[a].cep); printf("\n\n\n"); for(i=0; i<a; i++) // for para gravação no arquivo, ele vai executar toda vez que a função for chamada e vai jogar de 0 até o indice corrente de a que no começo também é zero { fwrite(dados[i].nome,30,1,p); fwrite(dados[i].end,20,1,p); fwrite(dados[i].cidade,20,1,p); fwrite(dados[i].estado,20,1,p); fwrite(dados[i].cep,20,1,p); } system("pause"); } //////////////////leitura////////////////////// *le_arq() { if((p = fopen("arq3.doc","r+"))==NULL) { printf("erro na abertura do arquivo \n"); exit(0); } printf("Dados do arquivo \n\n\n"); for(i=0; i<a; i++) // mesmo esquema do outro for, só que para leitura e apresentação { fread(&dados[i].nome,30,1,p); fread(&dados[i].end,20,1,p); fread(&dados[i].cidade,20,1,p); fread(&dados[i].estado,20,1,p); fread(&dados[i].cep,20,1,p); printf("Nome: %s",dados[i].nome); printf("\n\n"); printf("End: %s",dados[i].end); printf("\n\n"); printf("Cidade: %s",dados[i].cidade); printf("\n\n"); printf("Estado: %s",dados[i].estado); printf("\n\n"); printf("CEP: %s",dados[i].cep); printf("\n\n"); } getchar(); getchar(); } main() { int op=1; while (op!=0) { system("cls"); printf(" Ecolha uma opcao ! \n\n"); printf("1-Gravar arquivos.\n"); printf("2- Ler arquivos. \n"); printf("0- Sair. \n"); printf("\n\n"); scanf("%d", &op); printf("\n\n"); switch(op) { case 1: { cad_arq(); a=a+1; // depois que você adcionou um registro já coloca o indice da matriz no próximo break; } case 2: { le_arq(); break; } case 0: { printf("fim de programa, obrigado \n"); break; } default: { printf("opcao incorreta"); break; } } } fclose(p); system("pause"); } grato desde já
×
×
  • Criar Novo...