Ir para conteúdo
Fórum Script Brasil
  • 0

Leitura de arquivos com vetores e estrutura


sergio190986

Pergunta

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á

Editado por Jonathan Queiroz
Remover caixa alta do título conforme regra 3.7 (Jonathan)
Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

amigo, eu creio que o seu problema seja esse: for(i=0; i<a; i++) quando voce inicia o programa qual o seu valor de a? a=0, então o seu programa não irá ir até o fim dos seus registros pois voce esta mandando ele parar antes de chegar ao final.

o engracado é que voce não deveria nem estar imprimindo o primeiro registro....

espero ter ajudado...

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...