sexta-feira, 23 de outubro de 2015

Arquivo - inserindo dados em struct

Geralmente pra se ter uma leitura com êxito de um arquivo devemos
analizá-lo antes, isto porque o arquivo pode está todo
desorganizado, então criamos um certo padrão.
Agora pergunto, se estamos criando um arquivo que será lido pelo programa
Porque não organizá-lo antes?
Precisamos saber quantas strings, floats e inteiros o programa precisa
para a leitura; Então criei um arquivo e estou utilizando-o para preenchimento
dos campos de uma struct,onde declarei cinco chars e três ints.
A struct recebe memória alocada dinamicamente, e é liberada por free();
no término do programa.

Veja abaixo imagens do programa em execução:



Veja abaixo o código do programa:



#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
struct Cidadao {
     char nome [ 20 ];
     char Snome [ 20 ];
     char nasc [ 20 ];
     char lo_cal [ 20 ];
     char sigla [ 20 ];
     int dia;
     int mes;
     int ano;
};
void Moldura ( int a , int c , int b , int d , int e , int f ) {
     textbackground ( WHITE );
     for ( a = e; a <= c ; a++ )
         for ( b = f; b <= d ; b++ ) {
              gotoxy ( b , a );
              textbackground ( WHITE );
              printf ( " " );
         }
}
int main ( ) {
     Moldura ( 2 , 24 , 2 , 78 , 2 , 3 );
     system ( "title ARQUIVO - INSERINDO DADOS EM STRUCT" );
     FILE *arq;
     int i, j = 0, k;
     if ( ( arq = fopen (
              "C:\\Users\\Lima 32 SP1\\Desktop\\Arquivos\\Cidadão.txt" , "r" ) )
              == NULL ) {
         printf ( "Houve um erro na abertura do arquivo" );
         getche ( );
         exit ( 1 );
     }
     struct Cidadao *Pessoa [ 11 ];
     Pessoa [ j ] = ( struct Cidadao * ) malloc ( sizeof(struct Cidadao) );
     if ( !Pessoa ) {
         printf ( "Não foi possível alocar memória" );
         getche ( );
         exit ( 1 );
     }
     textcolor ( LIGHTRED );
     gotoxy ( 26 , 4 );
     printf ( "ARQUIVO - INSERINDO DADOS EM STRUCT" );
     textcolor ( LIGHTBLUE );
     gotoxy ( 21 , 6 );
     printf ( "Abaixo os dados que foram lidos do arquivo" );
     textcolor ( LIGHTRED );
     gotoxy ( 9 , 8 );
     printf (
              " Nome         Dia    Mês    Ano       Origem       Estado    Sigla" );
     k = 0;
     while ( k < 10 ) {
         k++;
         for ( j = 0; j < 1 ; j++ ) {
              fscanf ( arq , "%s %s" , Pessoa [ j ]->nome , Pessoa [ j ]->Snome );
              fscanf ( arq , "%d" , &Pessoa [ j ]->dia );
              fscanf ( arq , "%d" , &Pessoa [ j ]->mes );
              fscanf ( arq , "%d" , &Pessoa [ j ]->ano );
              fscanf ( arq , "%s" , Pessoa [ j ]->nasc );
              fscanf ( arq , "%s" , Pessoa [ j ]->lo_cal );
              fscanf ( arq , "%s" , Pessoa [ j ]->sigla );
         }
         for ( i = 0; i < j ; i++ ) {
              textbackground ( WHITE );
              textcolor ( BLACK );
              gotoxy ( 6 , k + 9 );
              printf ( "%s %s" , Pessoa [ i ]->nome , Pessoa [ i ]->Snome );
              gotoxy ( 24 , k + 9 );
              printf ( "%d" , Pessoa [ i ]->dia );
              gotoxy ( 30 , k + 9 );
              printf ( "%d" , Pessoa [ i ]->mes );
              gotoxy ( 36 , k + 9 );
              printf ( "%d" , Pessoa [ i ]->ano );
              gotoxy ( 45 , k + 9 );
              printf ( "%s" , Pessoa [ i ]->nasc );
              gotoxy ( 60 , k + 9 );
              printf ( "%s" , Pessoa [ i ]->lo_cal );
              gotoxy ( 73 , k + 9 );
              printf ( "%s" , Pessoa [ i ]->sigla );
              normvideo ( );
              Sleep ( 80 );
         }
         if ( k == 10 ) {
              Sleep ( 1800 );
              textbackground ( WHITE );
              textcolor ( LIGHTBLUE );
              gotoxy ( 17 , 21 );
              printf ( "Por: " );
              textcolor ( LIGHTMAGENTA );
              printf ( "Samuel Lima" );
              textcolor ( BLACK );
              gotoxy ( 17 , 22 );
              printf ( "sa_sp10@hotmail.com" );
              Sleep ( 1800 );
              textcolor ( LIGHTRED );
              gotoxy ( 36 , 24 );
              printf ( "MUITO OBRIGADO" );
              getch ( );
              exit ( 0 );
              getche ( );
         }
     }
     while ( j <= 10 )
         ;
     fclose ( arq );
     free ( Pessoa );
     return 0;
}


Nenhum comentário:

Postar um comentário

Observação: somente um membro deste blog pode postar um comentário.