Se já estamos acostumados a ler de forma
formatada com scanf(); não estamos muito longe
de entender como ler de modo idêntico com fscanf();
Ora, estudantes de linguagem C devem achar isto perfeito,
possível e necessário em alguns casos.
A função fscanf() funciona como a função scanf().
A diferença é que a entrada de fscanf() é um arquivo
e não o teclado do computador.
Abaixo está a síntaxe para fscanf();:
int fscanf (FILE *fp,char *str,...);
Como já acredito que você conhece a síntaxe de scanf();
imagino que você já detectou que a única diferença das duas
é a especificação do arquivo destino através do ponteiro de arquivo.
Alguns programadores não recomendam o uso de fprintf();
e fscanf(); para ler e escrever dados em arquivos,
pois trabalham com dados ASCII e não binários
o que ocasiona uma perda de desempenho no programa
dando preferência o uso de fread e fwrite.
Uma boa dica para uma leitura formatada com sucesso
é fazer uma análise no arquivo primeiro e procurar
estabelecer um determinado padrão se não houver.
Note que no nosso arquivo lendo da esquerda para direita
temos na primeira coluna nomes com sobrenomes de pessoas,
na seguinte dia de nascimento, na próxima mês de nascimento,
na seguinte o ano de nascimento, na coluna de origem
leitura de strings referente à nacionalidade,
e nas próximas colunas, são pesos e altura de cada um,
onde é óbvio que usamos floats para ler isto.
Exemplo mais claro que este que mostro agora
acho impossível de encontrar, portanto o iniciante
de linguagem C deve ficar satisfeito com tudo isto
que é apresentado agora e com clareza.
Veja abaixo uma imagem do programa em execução:
Abaixo os dados passados no arquivo usado pelo programa
Rubens Souza 02 10 1970 Brasileira 76.7 1.72
Neusa Rios 17 04 1982 Portuguesa 65.8 1.67
Sandro Ivo 12 03 1975 Brasileira 70.2 1.70
Damião Alves 23 01 1980 Argentina 59.9 1.65
Márcio Sá 05 08 1977 Madagascar 75.6 1.78
Mary James 14 11 1989 Peru 83.7 1.84
Ivete Cruz 18 09 1986 Polônia 61.3 1.69
Márcia Ramos 21 12 1990 Luxemburgo 57.1 1.64
Samuel Lima 21 02 1970 Brasileira 69.4 1.72
Cláudia Castro 16 07 1985 Brasileira 58.5 1.63
Veja abaixo o código do programa:
formatada com scanf(); não estamos muito longe
de entender como ler de modo idêntico com fscanf();
Ora, estudantes de linguagem C devem achar isto perfeito,
possível e necessário em alguns casos.
A função fscanf() funciona como a função scanf().
A diferença é que a entrada de fscanf() é um arquivo
e não o teclado do computador.
Abaixo está a síntaxe para fscanf();:
int fscanf (FILE *fp,char *str,...);
Como já acredito que você conhece a síntaxe de scanf();
imagino que você já detectou que a única diferença das duas
é a especificação do arquivo destino através do ponteiro de arquivo.
Alguns programadores não recomendam o uso de fprintf();
e fscanf(); para ler e escrever dados em arquivos,
pois trabalham com dados ASCII e não binários
o que ocasiona uma perda de desempenho no programa
dando preferência o uso de fread e fwrite.
Uma boa dica para uma leitura formatada com sucesso
é fazer uma análise no arquivo primeiro e procurar
estabelecer um determinado padrão se não houver.
Note que no nosso arquivo lendo da esquerda para direita
temos na primeira coluna nomes com sobrenomes de pessoas,
na seguinte dia de nascimento, na próxima mês de nascimento,
na seguinte o ano de nascimento, na coluna de origem
leitura de strings referente à nacionalidade,
e nas próximas colunas, são pesos e altura de cada um,
onde é óbvio que usamos floats para ler isto.
Exemplo mais claro que este que mostro agora
acho impossível de encontrar, portanto o iniciante
de linguagem C deve ficar satisfeito com tudo isto
que é apresentado agora e com clareza.
Veja abaixo uma imagem do programa em execução:
Abaixo os dados passados no arquivo usado pelo programa
Rubens Souza 02 10 1970 Brasileira 76.7 1.72
Neusa Rios 17 04 1982 Portuguesa 65.8 1.67
Sandro Ivo 12 03 1975 Brasileira 70.2 1.70
Damião Alves 23 01 1980 Argentina 59.9 1.65
Márcio Sá 05 08 1977 Madagascar 75.6 1.78
Mary James 14 11 1989 Peru 83.7 1.84
Ivete Cruz 18 09 1986 Polônia 61.3 1.69
Márcia Ramos 21 12 1990 Luxemburgo 57.1 1.64
Samuel Lima 21 02 1970 Brasileira 69.4 1.72
Cláudia Castro 16 07 1985 Brasileira 58.5 1.63
Veja abaixo o código do programa:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
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
- FORMATO ESPECÍFICO COM FSCANF" );
FILE *arq;
int k;
char nome [ 20 ];
char Snome [ 20 ];
char org [ 20 ];
float peso;
float alt;
int dia;
int mes;
int ano;
if ( ( arq = fopen ( "C:\\Users\\SAMUEL
64SP1\\Desktop\\"
"Arquivos\\Cidadão
II.txt", "r" ) ) == NULL ) {
printf ( "Houve um erro
na abertura do arquivo" );
getche ( );
exit ( 1 );
}
textcolor ( LIGHTRED );
gotoxy ( 23, 4 );
printf ( "ARQUIVO -
FORMATO ESPECÍFICO COM FSCANF" );
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 Peso
Altura" );
k = 0;
while ( k < 10 ) {
k++;
fscanf ( arq, "%s %s", nome, Snome );
fscanf ( arq, "%d", &dia );
fscanf ( arq, "%d", &mes );
fscanf ( arq, "%d", &ano );
fscanf ( arq, "%s", org );
fscanf ( arq, "%f", &peso );
fscanf ( arq, "%f", &alt );
textbackground ( WHITE );
textcolor ( BLACK );
gotoxy ( 6, k + 9 );
printf ( "%s %s", nome, Snome );
textcolor ( LIGHTBLUE );
gotoxy ( 24, k + 9 );
printf ( "%d", dia );
gotoxy ( 30, k + 9 );
printf ( "%d", mes );
gotoxy ( 36, k + 9 );
printf ( "%d", ano );
textcolor ( BLACK );
gotoxy ( 45, k + 9 );
printf ( "%s", org );
textcolor ( LIGHTMAGENTA );
gotoxy ( 60, k + 9 );
printf ( "%.1f", peso );
gotoxy ( 69, k + 9 );
printf ( "%.2f", alt );
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, 23 );
printf ( "MUITO
OBRIGADO" );
getch ( );
exit ( 0 );
}
}
fclose ( arq );
return 0;
}
Nenhum comentário:
Postar um comentário
Observação: somente um membro deste blog pode postar um comentário.