Beruflich Dokumente
Kultur Dokumente
Reviso
1. Funes 2. Ponteiros 3. Registros
Funes em C
tipo NomeDaFuncao (lista_de_parmetros) { comandos; return valor_retornado; }
Funes em C
int SomaDoisNumeros(int A, int B) { return A +B; } void ImprimeTexto() { printf(Ola Mundo); } int main() { int r; r= SomaDoisNumeros (30, 50); ImprimeTexto(); return 0; }
3 4
Ponteiros
int x=10, *p1, *p2; // x varivel do tipo inteiro // p1 e p2 so ponteiros para // variveis do tipo inteiro p1 = &x; //p1 recebe o endereo de x ( x) p2 = p1; //p2 recebe p1, tambm printf(%d, *p2); //escreve o valor de x printf(%d, p2); //escreve lixo printf(%p, p2); //escreve o endereo de x
Registros em C
struct RegFunc {
int Inscricao; char Nome[40], Rua[15]; int Numero; int CEP[8], CPF[11] char Sexo[3]; int DataNascimento[3]; bool FeriasVencidas ; int TempoDeCasa;
Define um novo tipo composto, heterogneo Declara uma varivel do novo tipo
}; RegFunc Funcionario;
Inicializao de Dados
struct tipo_funcionario { int cod; char nome[30]; char cargo[10]; int depto; float salario; }; int main() { struct tipo_funcionario func = { 1432, "Jose Costa", "Gerente", 2, 4656.00 }; printf("Valores do registro = %d, %s, %s, %d, %.2f\n", func.cod, func.nome, func.cargo, func.depto, func.salario); system("pause"); }
9
Arquivos
Arquivos
Podem ser armazenados em dispositivos de memria auxiliar (discos). Permitem o armazenamento permanente da informao. A alterao de um arquivo durante a execuo de um programa torna permanente (alm do tempo de execuo do programa) o processamento realizado. Em arquivos possvel armazenar-se bem mais informaes do que na memria.
11
Arquivos em C
Tanto a entrada como a sada de dados acontecem atravs do processamento de streams, independentemente do perifrico Streams so armazenados em dispositivos de memria auxiliar de forma permanente, a partir do uso de perifricos que aceitam tanto a leitura como a gravao de dados. Assim, em C, arquivos podem ser definidos como repositrios permanentes de streams Algumas operaes sobre um arquivo: abertura, leitura, escrita, fechamento As operaes de entrada e sada de dados sobre um arquivo (includos os arquivos padro: stdin - de entrada e stdout - de sada) so apoiadas pelo armazenamento temporrio de streams em reas da memria principal denominadas buffers
12
Arquivos em C
Abre/ Cria Arquivo x
Descarrega
Arquivos em C
associado a um dispositivo de armazenamento pode ser tratado como stream
sequncia de bytes sequncia de registros (estruturas)
MANIPULA
buffer
acesso
sequencial aleatrio/randmico
0 1 2 3 4 5 ...... N-1 eof
Buffer do arquivo x
Disco
Memria principal
0
Movimentao de dados Funes 13
29 30 nome2 1 0
59 60 2
89 90 3
Nome1 fone1
Arquivos em C
Arquivos de Texto: Os dados so gravados como caracteres de 8 bits
Ex.: Um nmero inteiro de 32 bits com 8 dgitos ocupar 64 bits no arquivo
Arquivos Binrios em C
No tem limitao de tamanho Comprimento do arquivo: funo do nmero e da natureza dos elementos que apresenta no momento Elementos no tm nome Somente um elemento acessvel a cada momento elemento corrente; Acesso aos dados: seqencial ou randmico
15 16
Arquivos Binrios: Os dados so gravados na forma binria (do mesmo modo que esto na memria)
Ex.: Um nmero inteiro de 32 bits com 8 dgitos ocupar 32 bits no arquivo
Arquivos Binrios em C
Um arquivo existe fisicamente no sistema de arquivos de forma independente dos programas que o utilizam Para que um programa possa criar, ou utilizar um arquivo pr-existente, o arquivo deve primeiro existir internamente ao programa, na forma de um ponteiro do tipo FILE. Para cada arquivo um ponteiro desse tipo deve ser declarado.
Arquivos Binrios em C
Um arquivo em C representado pelo tipo FILE* Quando queremos abrir um arquivo utilizamos a funo fopen e para fech-lo usamos a funo fclose.
Ex.:
FILE *arq;
A associao entre o arquivo fsico, existente no meio externo, e o ponteiro FILE correspondente, existente no programa, feita atravs da operao de abertura do arquivo.
17
fclose (arquivo);
18
fopen
fopen recebe duas strings como parmetros: Nome do Arquivo: Caminho relativo do arquivo
Ex.: lab11.c, c:/temp/lab1.c
Modo de abertura: Determina como o arquivo deve ser aberto, os principais so:
w: Escrita, se o arquivo existir cria um novo. r: Leitura, se o arquivo no existir d erro. a : Edio, se o arquivo no existir d erro.
x x
A funo fopen retornar um ponteiro para o arquivo ou 0(zero) caso ocorra algum problema na abertura.
19 20
fclose
fclose recebe o ponteiro do arquivo a ser fechado FILE* arquivo = fopen(nome.txt, wb); fclose (arquivo); Obs.: A string wb indica que queremos abrir um arquivo binrio para escrita. Sempre que quisermos abrir um arquivo binrio acrescentamos o caracter b na string do modo de abertura.
21
fread
fread (&varbuffer, numbytes, quant, FILE * ) L para a memria principal blocos de bytes de um arquivo, a partir do elemento corrente Os parmetros dessa funo so:
onde os dados lidos devem ser armazenados: &varbuffer, que pode ser o endereo de uma varivel com o tamanho dos bytes que sero lidos ou um ponteiro o tamanho em bytes da unidade a ser lida: numbytes quantas unidades devero ser lidas: quant o ponteiro para o arquivo sendo lido: FILE *
Em uma operao de leitura com fread o nmero total de bytes lidos : numbytes * quant Retorno da funo: o nmero de unidades lidas Que poder ser menor que o previsto se o final do arquivo for alcanado antes do esperado
22
feof
feof (FILE *) Indica se um arquivo chegou ao fim Retorna verdadeiro (no-zero) caso o final tenha sido atingido, falso (zero) caso contrrio Quando ocorre a situao fim de arquivo?
Sempre que a posio corrente de um arquivo estiver alm do nmero de bytes que ele contm armazenado Logo: se um arquivo vazio for aberto, s vai ser detectado o fim de arquivo aps uma tentativa de leitura
24
fwrite
fwrite (&varbuffer, numbytes, quant, FILE *) Grava blocos de bytes em um arquivo, a partir do elemento corrente Os parmetros dessa funo so:
de onde os dados devem ser obtidos: &varbuffer, que pode ser o endereo de uma varivel ou um ponteiro o tamanho em bytes da unidade a ser gravada: numbytes quantas unidades devero ser gravadas: quant o ponteiro para o arquivo sendo gravado: FILE *
Em uma operao de escrita com fwrite o nmero total de bytes gravados : numbytes * quant Retorno da funo: o nmero de unidades gravadas Podem ocorrer erros durante a gravao
26
fseek
k = fseek(FILE fp, long int offset, int base) Define a nova posio corrente do arquivo fp. A nova posio calculada adicionando o valor de offset (contado em bytes) posio indicada por base.
base = 0 incio do arquivo base = 1 valor corrente base = 2 fim do arquivo
Retorna zero se a operao teve sucesso ou diferente de zero se algum problema ocorreu.
28
// mostra no vdeo
printf("\nregistro %5d - ", nreg); for (i = 0; i < 5; i++) printf("%10d", a[i]); } else printf("\nregistro %5d - inexistente", nreg); fclose(fp); }
29
// le e mostra o registro
le_mostra_registro(nr, nome); } }
30
Arquivos Texto em C
Para ler ou escrever em um Arquivo Texto, utilizamos as funes:
fscanf: Idntica ao scanf, s que recebe o ponteiro para o arquivo como primeiro parmetro fprintf: Idntica ao printf, s que recebe o ponteiro para o arquivo como primeiro parmetro
Exerccio
1) Faa um programa que copie o contedo de um arquivo texto para outro 2) Faa um programa que leia valores digitados (double) e os grave em um arquivo, cujo nome tambm dado. Em seguida mostre o contedo do arquivo no vdeo.
FILE* arquivo = fopen(nome.txt, wb); fread (&x, sizeof(double), 1, arquivo); if (feof(arquivo)) fclose (arquivo); TEXTO: char texto[256]; fscanf(arquivo, %s, texto); fprintf(arquivo, %s, texto);
31 32
Importante: fscanf deve ser usado apenas com arquivos abertos para leitura e fprintf com arquivos abertos para escrita.
include<stdio.h> int main() { char texto[100]; FILE *leitura, *escrita; leitura = fopen (leitura.txt, r); if (leitura ==0 ) { printf(Nao abriu o leitura.txt); return0; } escrita = fopen(escrita.txt, w); if( escrita ==0 ) { printf(Nao abriu o escrita.txt); return0; } fscanf(leitura, %s, texto); fprintf(escrita, %s, texto); fclose(leitura); fclose(escrita); return 0; }
33
Le valores digitados (double) e os grava em um arquivo, cujo nome tambm dado. Em seguida mostra o contedo do arquivo no vdeo.
#include <stdio.h> int main() { FILE *fp; char nome_arquivo[32]; double a; printf("\nentre com o nome do arquivo:"); // le o nome do arquivo scanf("%s",nome_arquivo); fp = fopen (nome_arquivo,"w"); // abre o arquivo para gravao