Professional Documents
Culture Documents
Breve Histrico
Em 1973 Dennis Ritchie reescreveu o sistema operacional UNIX em uma linguagem de alto nvel (Ling. C). Surgem diversas implementaes utilizando C, porm os cdigos gerados eram incompatveis. ANSI (American National Standard Institute), em 1983 padronizou a ling. C.
Introduo Linguagem C
Introduo Linguagem C
Aplicaes escritas em C
Sistema Operacional: UNIX Planilhas: 1,2,3 e Excel Banco de Dados: dBase III, IV e Access ( gerenciador de base de dados). Aplicaes Grficas: Efeitos Especiais de filmes como Star Trek e Star War.
Introduo Linguagem C
Caractersticas da Linguagem C
Portabilidade entre mquinas e sistemas operacionais. Alia caractersticas de linguagens de alto e baixo nvel (liberdade ao programador). Programas Estruturados. Total interao com o Sistema Operacional. Cdigo compacto e rpido, quando comparado ao cdigo de outras linguagem de complexidade anloga.
Introduo Linguagem C
Caractersticas da Linguagem C
C uma linguagem compilada: l todo o cdigo fonte e gera o cdigo objeto (ling. de mquina) uma nica vez. Linguagens Interpretadas: l o cdigo fonte, traduz e executa cada vez que o programa for executado.
Introduo Linguagem C
Detalhes Importantes
Sempre que o cdigo fonte for alterado ele deve ser novamente compilado. C case senitive Deve-se listar antecipadamente todas a as variveis utilizadas no programa.
Introduo Linguagem C
Palavras reservadas
So palavras que tm um significado especial para a linguagem.
auto, break, case, if, for, while, begin, end, continue, return, const,....
Bibliotecas
Conjunto de funes para realizar tarefas especficas. Biblioteca padro C - ANSI - funes bsicas. As primeiras linhas do programa indicam as bibliotecas utilizadas
Estrutura de um programa C
/* Primeiro Programa em C */ #include <stdio.h> main() { printf(Meu primeiro programa em C\n); }
Introduo Linguagem C
Estrutura de um programa C
/* Primeiro Programa em C */ comentrios #include <stdio.h> /*biblioteca de E/S */ main() /*funo principal inicio do programa*/ { /*marca incio da funo*/ printf(Meu primeiro programa em C\n); /*funo para escrever na tela*/ } /*marca fim da funo*/
Introduo Linguagem C
Digitando um programa C
Utilizar um editor qualquer: vi ou xedit Digite o programa anterior Salve com o nome
p1.c
Introduo Linguagem C
Compilando e Executando
Para compilar: (verifica a sintaxe)
>> cc fonte.c <ENTER>
Executando:
>> ./nomeexec <ENTER>
OBS:
Se o nome do executvel no for informado o default a.out
Introduo Linguagem C
Varivel
Varivel: objeto que pode assumir diversos valores; espao de memria de um certo tipo de dado associado a um nome para referenciar seu contedo
Main ( ) { int idade; idade = 30; printf ( A idade : %d, idade); }
Introduo Linguagem C
Nomes de Variveis
quantos caracteres quiser (32); comece com letras ou sublinhado:
Seguidos de letras, nmeros ou sublinhados
C sensvel ao caso:
peso <> Peso <> pEso
no podemos definir um identificador com o mesmo nome que uma palavra chave
auto static extern int long if while do ......
Introduo Linguagem C
Declarao de Variveis
Instruo para reservar uma quantidade de memria para um certo tipo de dado, indicando o nome pelo qual a rea ser referenciada
>> tipo nome-da-varivel; ou >> tipo nome1, nome2,...,nomen EX: char nome; int idade, num;
Introduo Linguagem C
Introduo Linguagem C
10
Comandos bsicos
Entrada de Dados
Sada de Dados
Processamento de dados
Instrues de E/S
Introduo Linguagem C
OBS: Para seqncia de caracteres (%s), o caracter & no dever ser usado.
Introduo Linguagem C
11
Introduo Linguagem C
String de controle
%c caracter %d inteiro %e nmero ou notao cientfica %f ponto flutuante %o octal %x hexadecimal %s string (cadeia de caracteres) %lf double
Introduo Linguagem C
12
Introduo Linguagem C
13
Caracteres Especiais
\n \r \t \b \ \\ nova linha enter tabulao (tab) retrocesso aspas barra
Introduo Linguagem C
14
Sada:
3456.8 3456.780
Introduo Linguagem C
15
Programando Exerccio 1
Faa um programa para ler e escrever na tela o seu nome e a sua idade.
#include <stdio.h> main( ) { int idade; char nome[30]; printf (Digite o seu nome:\n); scanf(%s, nome); printf (Digite a sua idade:\n); scanf (%d, &idade); printf(A idade do(a) %s %d,nome, idade); }
Introduo Linguagem C
Programando Exerccio 2
Faa um programa para ler e escrever na tela os seguintes dados:
Nome Endereo Telefone Cidade Cep
Introduo Linguagem C
16
Operadores Aritmticos
Operador + * / % -++ Ao Adio Multiplicao Diviso Resto da diviso inteira Subtrao (unrio) Decremento Incremento
Introduo Linguagem C
Ao
Maior que Maior ou igual que Menor que Menor ou igual que Igual a Diferente de Condio E Condio OU No
Introduo Linguagem C
17
Operadores - Observao
Em C o resultado da comparao ser ZERO se resultar em FALSO e DIFERENTE DE ZERO no caso de obtermos VERDADEIRO num teste qualquer.
Introduo Linguagem C
Operadores - Exemplo
#include <stdio.h>
main ( ) Sada: Verd.=1 Falso = 0 { int verdadeiro, falso; verdadeiro = (15 < 20); falso = (15 == 20); printf(Verd.= %d,Falso= %d, verdadeiro, falso); }
Introduo Linguagem C
18
Comparaes e Testes
Observemos antes de mais nada que ++x diferente de x++!
Se x = 10; y = ++x;
/* x=x+1; y=x; */
ento x = 11 e y = 11
ento x = 11 e y = 10
Introduo Linguagem C
19
Comparaes e Testes
Se x = 1; y = 2; printf(%d == %d e %d\n, x, y, x==y ) Qual seria a sada deste comando? resultaria em 1 == 2 0 (pois a expresso falsa)
Introduo Linguagem C
Comparaes e Testes
if (10 > 4 && !(10 < 9) || 3 <= 4) Como seria avaliado esta instruo? resultaria em Verdadeiro, pois dez maior que quatro E dez no menor que nove OU trs menor ou igual a quatro
Introduo Linguagem C
20
Operador Sizeof
Este operador retorna o tamanho da varivel ou tipo que est em seu operando. Por exemplo sizeof(char) resultaria em 1.
Introduo Linguagem C
Converses de Tipos
Quando forem misturadas variveis de diferentes tipos, o compilador C converter os operandos para o tipo de operando maior, de acordo com as regras descritas a seguir: 1-Todo char e short int convertido para int. Todo float convertido para double. 2-Para os demais pares de operandos valem as seguintes regras em seqncia: 2.1- Se um operando for long double, o outro tambm o ser. 2.2- Se um operando for double, o outro tambm o ser. 2.3- Se um operando for long, o outro tambm o ser. 2.4- Se um operando for unsigned, o outro tambm o ser.
Introduo Linguagem C
21
Exerccios
2) 3)
Introduo Linguagem C
22
Estruturas de Deciso
Permitir testes para decidir aes alternativas:
if if - else switch (?:) Operador Condicional
Introduo Linguagem C
Comando if
if (condio) instruo; #include <stdio.h>
main ( ) { char ch; ch = getchar ( ); if (ch == p) printf (voc pressionou a tecla p); }
Introduo Linguagem C
23
if aninhados
Se um comando if est dentro do outro if, dizemos que o if interno est aninhado.
#include <stdio.h> main ( ) { char ch; printf ( digite uma letra entre A e Z); ch = getchar ( ); if (ch >= A) if (ch < = Z) printf ( voc acertou); } #include <stdio.h> main ( ) { char ch; printf ( digite uma letra entre A e Z); ch = getchar ( ); if ((ch >= A) && (ch < = Z)) printf ( voc acertou); }
Introduo Linguagem C
Comando if-else
O comando if s executa a instruo caso a condio de teste seja verdadeira, nada fazendo se a expresso for falsa. O comando else executar uma instruo ou um conjunto de instrues se a expresso for falsa.
Introduo Linguagem C
24
Comando if-else
if (condio) instruo; else instruo;
#include <stdio.h> main ( ) { if (getchar ( ) == p) printf ( voc digitou p); else printf ( voc no digitou p); }
Introduo Linguagem C
25
if (n > 0) { if (a > b) z = a; } else z = b; Ex1: Quando n > 0 e a < b Ex2: Quando n < 0
Introduo Linguagem C
26
main() { int a,b,c,d; cls(); printf(Digite o 1 Nmero: ); scanf(%d,&a); printf(\nDigite o 2 Nmero: ); scanf(%d,&b); printf(\nDigite o 3 Nmero: ); scanf(%d,&c); if (a > b) d = a; else d = b; if (c > d) printf(\nO Maior %d,c); else printf(\nO Maior %d,d); }
27
Comando ?:
Forma compacta de expressar uma instruo if else (condio) ? expresso1 : expresso2 Max = (num1 > num2) ? num1 : num2 Note:
if (num1 > num2) max = num1; else max = num2;
Exemplo:
ABS = (num < 0) ? - num : num;
Introduo Linguagem C
28
Exerccios
4) 5) 6)
Introduo Linguagem C
Comando Switch
Forma de se substituir o comando if else ao se executar vrios testes Diversas vezes precisamos determinar se um valor encontra-se numa lista de valores. Apesar de podermos usar uma seqncia de ifs, este recurso alm de no ser elegante, por vezes confunde o entendimento do programa. Vejamos uma opo melhor: o comando switch.
Introduo Linguagem C
29
Comando Switch
switch <varivel> { case <constante 1> : <comandos>; [break;] case <constante 2> : <comandos>; [break;] case <constante 3> : <comandos>; [break;] [default : <comandos>;] }
OBS:
varivel deve ser uma varivel do tipo inteiro ou caracter; break serve para terminar a seqncia de comandos em execuo, por serem opcionais, se forem suprimidos permitem que o case a seguir seja executado, sem haver qualquer quebra na seqncia do processamento.
Comando Switch #include <stdio.h> main ( ) { char op; float num 1, num 2;
printf ( digite um n.o, um operador e um n.o); scanf ( %f %c %f, &num1, &op, &num2); switch (op) { case +: printf ( = %f, num 1 + num 2); break: case -: printf ( = %f, num 1 - num 2); break; default: printf ( operador invlido); } }
30
Exerccio
Seguindo a idia do exerccio anterior incremente a calculadora com mais funes matemticas.
Sugesto: use funes da biblioteca matemtica math.h como por exemplo:
sin(x) cos(x) log(x) sqrt(x) pow(x1,x2)
Estruturas de Repetio
#include <stdio.h> main ( ) { Como imprimir os 1000 1os nmeros a printf (1); partir de 1? printf (2); : : : printf (10); } sada: 1 2 3 4 ... 10
Introduo Linguagem C
31
Estruturas de Repetio
for, while, do-while repetir uma seqncia de comandos
#include<stdio.h> main ( ) { int num; for (num = 1; num <= 1000; num++) printf ( % d, num); } Sada: 1 2 3 ... 1000
Introduo Linguagem C
Comando for
for (<incio>;<condio>;<incremento>) <comando>;
Na forma mais simples: Inicializao: expresso de atribuio sempre executada uma nica vez Teste: condio que controla a execuo do lao sempre avaliada a cada execuo verdadeiro continua a execuo falso para a execuo
Introduo Linguagem C
32
Comando for
Incremento: define como a varivel de controle ser alterada sempre executada aps a execuo do corpo do lao Exemplo: imprimindo nmeros pares
Sada 2 4 6 8
Comando for
Flexibilidade: qualquer expresso de um lao for pode conter vrias instrues separadas por vrgula. for (x=0,y=0;x+y<100;++x,y=y+x) printf(%d,x+y); Esta instruo inicializaria x e y com zero, incrementando x de 1 em 1 e y receberia seu valor acrescido do de x. O resultado a cada iterao seria impresso desta forma: 0 (x=0 e y=0) 2 (x=1 e y=1) 5 (x=2 e y=3) 9 14 e assim sucessivamente.
33
34
Introduo Linguagem C
}
printf(Fim do Loop!);
35
Comando While
while <condio> <comando>;
Exemplo: Contagem #include <stdio.h> main() { int i=0; while (i < 10) { printf(%d,i); i++; } }
Introduo Linguagem C
Comando do - while
Ao contrrio das estruturas for e while que testam a condio no comeo do loop, do / while sempre a testa no final, garantido a execuo ao menos uma vez da estrutura.
Exemplo: Trmino determinado pelo usurio.
#include <stdio.h> main() { int num; do { scanf(%d,&num); } while (num < 100); }
36
/ * testa a capacidade de adivinhar uma letra * / #include <stdio.h> main ( ) { char ch; int tentativas; do { printf (digite uma letra); scanf(%c, ch); getchar ( ); tentativas = 1; while ( ch!= t) { printf (%c incorreto \n, ch); tentativas++; printf (tente novamente \n); } printf (%c correto, ch); printf (acertou em %d vezes, tentativas); printf (continua? (s / n):); scanf(%c,ch); getchar( ); } while (ch == s); }
Exerccios
37
Funes / Procedimentos
Dividir uma tarefa complexa em tarefas menores, permitindo esconder detalhes de implementao Evita-se a repetio de um mesmo cdigo Tipo Nome (lista de parmetros) { corpo }
Introduo Linguagem C
Procedimentos
Funes que no retornam valores Tipo: void
___________usando funcoes___________ #include <stdio.h> void desenha(); void desenha( ) { int i; for (i = 0; i < = 10; i++) printf (-); } main ( ) { desenha ( ); printf ( usando funes); desenha ( ); }
38
Funes
Retornam valores
#include <stdio.h> int fatorial (int); int fatorial (int n) { int i, resultado = 1; for ( i = 1; i <= n; i ++) resultado *= i; return resultado; } main ( ) { printf ( o fatorial de 4 = %d, fatorial(4) ); printf ( o fatorial de 3 = %d, fatorial(3) ); }
Variveis locais
Variveis declaradas dentro de uma funo so denominadas locais e somente podem ser usadas dentro do prprio bloco So criadas apenas na entrada do bloco e destrudas na sada (automticas)
Introduo Linguagem C
39
Variveis Locais
void desenha ( ) { int i, j; . . . } main ( ) { int a; desenha(); a = i; erro . . . } void desenha ( ) { int i, j; . . . . . . } void calcula ( ) { int i, j; . . . . . . } i, j em desenha so variveis diferentes de i, j em calcula.
Variveis Globais
Varivel que declarada externamente podendo ser acessada por qualquer funo
#include <stdio.h> main ( ) { int i; ......... ......... desenha ( ); calcula ( ); } void desenha ( ) { int j; i = 0; . . . } void calcula ( ) { int m; i = 5; . . . }
Introduo Linguagem C
40
Comando Return
Causa a atribuio da expresso a funo forando o retorno imediato ao ponto de chamada da funo.
#include <stdio.h> main ( ) { char letra; printf ( digite uma letra em minsculo); letra = minsculo ( ); if (letra == a) printf (ok); }
Introduo Linguagem C
char minsculo ( ) { char ch; scanf(%c, ch); if ( (ch >= A) && (ch <= Z)) return (ch + a - A); else return (ch); }
Note pelo exemplo anterior que a funo minsculo l um valor internamente convertendo-o para minsculo.
Como usar esta funo se j temos uma letra e desejamos convert-la para minsculo?
Introduo Linguagem C
41
Introduo Linguagem C
42
Introduo Linguagem C
43
Usando vrias funes: calcular a seguinte seqncia S(x, n) = x/1! + x2/2! + x3/3! + ... + xn/ n! #include <stdio.h> float serie (float , int ); float potencia (float , int) int fat (int); main( ) { float x; int termos; printf(entre com o numero de termos: ); scanf(%d, &termos); printf(entre com o valor de X: ); scanf(%f, &x); printf(O valor de srie = %f , serie(x, termos)); }
float serie (float x, int n) { int i; float resultado = 0; for ( i = 1; i <= n; i++) resultado += potncia( x, i ) / fat( i ); return resultado; } float potencia (float base, int expoente) { int i; float resultado = 1; if (expoente == 0) return 1; for (i = 1; i <= expoente; i++) resultado *= base; return resultado; }
44
int fat (int n) { int i, resultado = 1; for ( i = 1; i <= n; i ++) resultado *= i; return resultado; }
Vetores
tipo de dado usado para representar uma coleo de variveis de um mesmo tipo estrutura de dados homognea unidimensional
Ex: Ler a nota de 3 alunos e calcular a mdia int nota0, nota1, nota2; printf(entre com a 1a. nota); scanf(%d, ¬a0); : : : printf(mdia = %f, (nota0 + nota1 + nota2) / 3));
Introduo Linguagem C
45
46
Introduo Linguagem C
Introduo Linguagem C
47
#include <stdio.h> Vetores Obs importantes #define TAMANHO 100 main( ) { int quantidade, media = 0; float notas [ TAMANHO ]; // quantidade deve ser TAMANHO printf ( quantas notas devo ler ?); scanf(%d, &quantidade); for ( i = 0; i < quantidade; i++) { printf ( entre com a nota %d, i+1); scanf(%d, ¬as [ i ]); } : : : for ( i = 0; i < quantidade; i++) media += notas [ i ]; : : : }
48
int maximum( int values[5] ) Sada: { Entre com 5 numeros: int max_value, i; 7 23 45 9 121 max_value = values[0]; Valor Maximo: 121 for( i = 0; i < 5; ++i ) if( values[i] > max_value ) max_value = values[i]; return max_value; }
Introduo Linguagem C
Matrizes
em C podemos definir um vetor em que cada posio temos um outro vetor (matriz). estrutura de dados homognea multidimensional Note: int matria [ 4 ] [ 40 ]; temos 4 matrias, cada uma com 40 alunos
Introduo Linguagem C
49
Matrizes - Leitura
int i, j, matria [ 4 ] [ 40 ]; for ( i = 0 ; i < 4; i++ ) { printf (entre com as notas da matria %d, i+1); for ( j = 0; j < 40; j++) { printf (entre com a nota do aluno %d, j+1); scanf (%d, &materia [ i ] [ j ]); } }
Introduo Linguagem C
Varivel String
matriz do tipo char terminada pelo caractere null \0 cada caractere de um string pode ser acessado individualmente vetor de tamanho n string de tamanho ( n-1 )
Ex: char string[10] = exemplo ; char string[10] = { exemplo }; char string[10] = { e, x, e, m, p, l, o, \0 }; printf ( %s, string ); printf ( %c, string [ 0 ] );
Introduo Linguagem C
50
Lendo Strings
scanf : l o string at que um branco seja encontrado
Ex: main ( ) { char nome[40];
Sada: Digite seu nome: Jose Maria Bom dia Jose
printf ( Digite seu nome: ); scanf ( %s, &nome[ 0 ] ); //scanf ( %s, nome ); printf ( Bom dia %c, nome[0] ); }
Introduo Linguagem C
Lendo Strings
Gets
Ex: main ( ) { char nome[40]; l caracteres at encontrar \n substitui \n por \0
Sada: Digite seu nome: Jose Maria Bom dia Jose Maria
printf ( Digite seu nome: ); gets ( &nome[ 0 ] ); // ou gets(nome); printf ( Bom dia %s, nome ); }
Introduo Linguagem C
51
Imprimindo Strings
printf puts
Ex: main ( ) { char nome[40]; Sada: Digite seu nome: Jose Maria Bom dia Jose Maria
printf ( Digite seu nome: ); gets ( &nome[ 0 ] ); puts ( Bom dia ); puts ( nome ); }
Introduo Linguagem C
printf ( Digite seu nome: ); gets ( &nome[ 0 ] ); printf (Tamanho = %d, strlen(&nome[ 0 ]) ); }
Introduo Linguagem C
52
Sada: Maria JoseMaria Cuidado: dado str1 + str2 tem que caber em str1
53
#include <stdio.h> main ( ) { char nome[40] = Jose; char sobrenome[30] = Maria; if ( strcmp ( nome, sobrenome ) !=0) puts ( os strings so diferentes ); else puts ( os strings so identicos ); }
Converses
podemos tambm converter strings e nmeros (inteiros/fracionrios) conforme desejarmos:
Exemplo: Converso de String em Nmero Inteiro #include <stdio.h> main() { int i; char s[10]; printf(Digite uma sequencia de numeros com letras: ); gets(s); i = atoi(s); printf(Numero: %d ,i); }
Introduo Linguagem C
54
Ponteiros
Ponteiros, como o prprio nome diz, um tipo de varivel que aponta para outra (de um tipo qualquer). Na verdade um ponteiro guarda o endereo de memria (local onde se encontra na memria) de uma varivel.
Introduo Linguagem C
Ponteiros
int teste=20; int *p; p=&teste;
int teste=20; int *p; p=&teste; printf("%d\n",*p);
p ir armazenar o endereo de memria da varivel teste. Ou seja, p no armazena o valor 20, mas sim o endereo de teste que, este sim, armazena o valor 20.
55
Ponteiros
Outro exemplo: char algo[5] = { 5, 4, 3, 2, 1 }; char *c; c=&algo[2]; Colocamos em c o endereo do terceiro elemento de algo: c[0]=3, c[1]=2 e c[2]=1. Se tivssemos feito c=&algo[3], ento: c[0]=2 e c[1]=1.
Introduo Linguagem C
Ponteiros
int vet_notas[50]; int *pont_notas; pont_notas=vet_notas; Para imprimir a primeira e a dcima nota de nosso vetor, temos duas opes:
print ("A primeira nota : %d", vet_notas[0]); print ("A primeira nota : %d", *pont_notas); print ("A dcima nota : %d", vet_notas[9]); print ("A dcima nota : %d", *(pont_notas+9));
56
Introduo Linguagem C
Malloc e Free
Alocao dinmica #include <stdio.h> main() { int *notas, numero, i;
Introduo Linguagem C
57
Printf(Entre com o nmero total de alunos\n); scanf(%d, &numero); notas=(int *)malloc(numero * sizeof(int)); for (i=0; i,numero; i++) { printf(Digite a nota do aluno %d, i+1); scanf(%d, ¬as[i]); printf(\n A nota do aluno %d :%d: , i+1, notas[i]); } free(notas);
Estruturas
Uma estrutura um conjunto de variveis dentro de um mesmo nome. Em geral, uma varivel de um tipo especfico, por exemplo, temos uma varivel do tipo inteira e estamos fechados a nos referenciar aquele nome que lhe foi dado sempre por um nmero do tipo inteiro, logicamente. J as estruturas, dentro de um mesmo nome podemos nos referenciar a uma gama de variveis pr-definidas.
Introduo Linguagem C
58
Estruturas
struct molde_conta { char nome[50]; int telefone; float saldo ; }; Definido o molde, devemos agora declarar a varivel que utilizar desse molde:
Estruturas
struct molde_conta { char nome[50]; int telefone; float saldo; } conta1, conta2; equivalente a: struct molde_conta conta1, conta2;
Introduo Linguagem C
59
Vetores de Estruturas
struct molde_conta conta[100];
conta[1].telefone=2212324; conta[1].nome=joao carlos; conta[1].saldo=1245.89; conta[5].telefone=2212888; conta[5].nome=Maria dos Santos; conta[5].saldo=6908.79;
Introduo Linguagem C
60
Arquivos - feopen( )
A funo fopen tem duas finalidades: - abrir uma fila de bytes - ligar um arquivo em disco quela fila FILE *fopen(char *NomeArquivo, char *modo);
FILE *arquivo; if ((arquivo = fopen(teste,w)) == NULL) { puts(No posso abrir o Arquivo teste.\n); exit(1); /* fora o trmino da execuo da rotina */ }
Introduo Linguagem C
Modo
Significado
r Abre Arquivo de Texto para Leitura w Cria Arquivo de Texto para Gravao a Anexa a um Arquivo de Texto rb Abre Arquivo Binrio para Leitura wb Cria Arquivo Binrio para Gravao ab Anexa a um Arquivo Binrio r+ Abre Arquivo de Texto para Leitura/Gravao w+ Cria Arquivo de Texto para Leitura/Gravao a+ Abre ou Cria Arquivo de Texto para Leitura/Gravao r+b Abre Arquivo Binrio para Leitura/Gravao w+b Cria Arquivo Binrio para Leitura/Gravao a+b Abre ou Cria Arquivo Binrio para Leitura/Gravao
61
Arquivos - putc ( )
Grava caracteres em fila previamente abertos
putc(a, arquivo);
Introduo Linguagem C
Arquivos - getc ( )
Ler caracteres em uma fila aberta int getc(FILE *arquivo); Exemplo: ch = getc(arquivo); while (ch != EOF) ch = getc(arquivo);
Introduo Linguagem C
62
Arquivos - fclose ( )
Fechar as filas abertas. Caso o programa seja encerrado sem que as filas sejam fechadas, dados gravados nos buffers podem ser perdidos. int fclose(FILE *fp); fclose(arquivo);
Introduo Linguagem C
main() { FILE *arq; char ch; if ((arq=fopen(teste.dat,w)) == NULL) { printf(Arquivo no pode ser criado\n); exit(1); } do{ ch=getchar(); putc(ch,arq); }while (ch!=0); fclose(arq); }
63
Arquivos - ferror ( )
Determina se a operao de arquivo produziu um erro. Sua forma geral ser: int ferror(FILE *fp);
Introduo Linguagem C
Arquivos - rewind( )
Reinicia o arquivo, equivale ao Reset do Pascal, ou seja apenas movimenta o ponteiro do arquivo para seu incio.
Introduo Linguagem C
64
Introduo Linguagem C
Arquivos - fwrite ( )
main() { FILE *fp; float f = 12.23; if ((fp=fopen(teste,wb)) == NULL) { printf(Arquivo no pode ser criado\n); exit(1); } fwrite(&f,sizeof(float(),1,fp); fclose(fp); }
65
Arquivos - fseek ( )
Entrada e sada com acesso aleatrio int fseek(FILE *fp, long int num_bytes, int origem);
fp - o ponteiro de arquivo devolvido por fopen(). num_bytes - um inteiro longo que representa o nmero de bytes desde a origem at chegar a posio corrente. OBS: Este comando normalmente utilizado em arquivos binrios. Introduo Linguagem C
66
carga() Exemplo de montagem de um pequeno { cadastro de nomes, endereos e salrios FILE *fp; de funcionrios em arquivo. int i; if ((fp=fopen(LISTA.DAT,rb)) == NULL) { puts(Falha na Abertura do Arquivo!); return; } inicia_matriz(); for (i=0; i < 100; i++) if (fread(&matriz[i], sizeof(struct registro), 1, fp) != 1) { if (feof(fp)) { fclose(fp); return; } else { puts(Erro de Leitura! ); fclose(fp);
return; } } }
salvar() { FILE *fp; int i; if ((fp=fopen(LISTA.DAT,wb))==NULL) { puts(Falhou Abertura! ); return; } for (i=0;i<100;i++) if (*matriz[i].nome) if(fwrite(&matriz[i], sizeof(struct registro), 1,fp) != 1) puts(Falha na Gravacao! ); fclose(fp); }
67
Vamos supor que desejamos criar um programa que escreva num arquivo cujo nome ser fornecido na chamada do programa (Exemplificando: KTOD TESTE <Enter>). Gostaramos que o DOS criasse o arquivo TESTE guardando o contedo digitado durante a execuo do programa.
main(argv,argc)
onde argc - tem o nmero de argumentos contidos nas linha de comando (necessariamente maior ou igual a um, pois o prprio programa j considerado um argumento pelo D.O.S.). argv um ponteiro que acomodar os caracteres digitados.
68
Exemplo 1: Programa KTOD, que escreve caracteres num arquivo criado/aberto via D.O.S.
#include stdio.h main(argc,argv) int argc; char *argv[]; { FILE *fp; char ch; if (arg != 2) { printf(Digite o Nome do Arquivo\n); exit(1); }
if ((fp=fopen(argv[1],w)) == NULL) { printf(Arquivo no pode ser aberto\n); exit(1); } do { ch = getchar(); putc(ch,fp); } while( ch != $); fclose(fp); }
69
Exemplo 2: Programa DTOV, que apresenta em vdeo os caracteres digitados via KTOD.
#include stdio.h main(argc,argv) int argc; char *argv[]; { FILE *fp; char ch; if (arg != 2) { printf(Digite o Nome do Arquivo\n); exit(1); } if ((fp=fopen(argv[1],r)) == NULL) { printf(Arquivo no pode ser aberto\n); exit(1); } ch = getc(fp);
70
71