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
Devemos entender Nvel Alto como sendo a capacidade da linguagem em compreender instrues escritas em dialetos prximos do ingls (Ada e Pascal, por exemplo) e Nvel Baixo para aquelas linguagens que se aproximam do assembly, que a linguagem prpria da mquina, compostas por instrues binrias e outras incompreensveis para o ser humano no treinado para este propsito. Infelizmente, quanto mais clara uma linguagem for para o humano (simplicidade >) mais obscura o ser para a mquina (velocidade <).
Introduo Linguagem C
Velocidade
Assembler C Basic Pascal
Clareza
Ada
COBOL
Modula -2
Introduo Linguagem C
Aplicaes escritas em C
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
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
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
Nomes de Variveis
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
determinar um conjunto de valores e as possveis operaes realizadas sobre os mesmos ; informa a quantidade de memria (bytes);
tipo char int float double bytes 1 2 4 8 escala -128 a 127 -32.768 a 32.767 3.4e-38 a 3.4e+38 1.7e-308 a 1.7e+308
Introduo Linguagem C
Comandos bsicos
Entrada de Dados
Sada de Dados
Processamento de dados
Instrues de E/S
Introduo Linguagem C
Exemplo: scanf(%d,&idade);
OBS: Para seqncia de caracteres (%s), o caracter & no dever ser usado.
Introduo Linguagem C
Exemplo: printf (Digite a sua idade:\n); scanf (%d, &idade); printf(Sua idade : %d, idade);
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) %If double
Introduo Linguagem C
um endereo de memria o nome que o computador usa para identificar uma varivel
toda varivel ocupa uma rea de memria e seu endereo o primeiro byte por ela ocupado
Introduo Linguagem C
Quando usamos & precedendo uma varivel estamos a apontar para o endereo desta varivel na memria
Ex: Sada: valor = 2, endereo = 1230 Main ( ) Varia conforme memria da mquina { int num; num = 2; printf (valor = %d, endereo = %Iu, num,&num); }
Introduo Linguagem C
Caracteres Especiais
\n \r \t \b \ \\ nova linha enter tabulao (tab) retrocesso aspas barra
Introduo Linguagem C
#include <stdio.h> main ( ) { printf (os alunos so %2d \n, 350); printf (os alunos so %4d \n, 350); printf (os alunos so %5d \n, 350); } Sada: os alunos so 350 os alunos so 350 os alunos so 350
Introduo Linguagem C
Sada:
3456.8 3456.780
Introduo Linguagem C
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
Introduo Linguagem C
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
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
Comparaes e Testes
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
Comparaes e Testes
Se x = 1; y = 2; printf(%d == %d e %d\n, x, y, x==y )
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
Operador Sizeof
Este operador retorna o tamanho da varivel ou tipo que est no 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
Nota: Devemos observar que o compilador C bastante flexvel e pouco vigilante, comportando-se de maneira muito diferente de um compilador Clipper ou Pascal, sempre vigilantes com relao aos tipos das variveis. De fato aqueles compiladores podem gerar executveis misturando tipos, porm a ocorrncia de erros de execuo quase inevitvel. Ao contrrio destes compiladores, os compiladores C ajeitam as coisas para o programa funcionar da melhor maneira possvel, o que no significa em hiptese alguma que os resultados sero os esperados por programadores relapsos. Assim esta boa caracterstica dos compiladores C, pode transformar-se numa autntica bomba relgio para programas no muito bem elaborados.
Introduo Linguagem C
Exerccios
2) 3)
Introduo Linguagem C
Estruturas de Deciso
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
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) && (ch < = Z)) printf ( voc acertou); }
#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); }
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
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
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
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); }
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
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
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); } }
Exerccio
Seguindo a idia do exerccio anterior incremente a calculadora com mais funes matemticas.
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
Estruturas de Repetio
#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
Comando for
Incremento: define como a varivel de controle ser alterada sempre executada aps a execuo do corpo do lao
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.
A ausncia de condies de inicializao, continuidade e terminao, causaro um processo contnuo e teoricamente infinito (veremos posteriormente a intruo break, que tem a capacidade de encerrar um processo assemelhado ao exemplificado).
Introduo Linguagem C
A presena do ponto e vrgula finalizando o comando, fora a execuo do loop sem que seja executado qualquer outro comando.
Introduo Linguagem C
Ao contrrio de outras linguagens que no permitem o trmino do loop a no ser quando a condio de finalizao for satisfeita, a linguagem C permite que um loop seja interrompido antes de seu trmino normal (desestruturao) sem que exista qualquer tipo de inconveniente. O comando break causa essa interrupo.
}
printf(Fim do Loop!);
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); }
#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
Funes / Procedimentos
Dividir uma tarefa complexa em tarefas menores, permitindo esconder detalhes de implementao Evita-se a repetio de um mesmo cdigo
Procedimentos
___________usando funcoes___________
#include <stdio.h> void desenha(); void desenha( ) { int i; for (i = 0; i < = 10; i++) printf (-); } main ( ) { desenha ( ); printf ( usando funes); desenha ( ); }
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
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>
int i;
Comando Return
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
Passagem de parmetro por valor uma cpia do argumento passada para a funo O parmetro se comporta como uma varivel local
Introduo Linguagem C
Ex 2: float potncia (float base, int expoente) { int i; float resultado = 1; if (expoente == 0) return 1; for (i = 1; i <= expoente; i++) resultado *= base return resultado; }
Introduo Linguagem C
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; }
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
em C no existe declarao de vetor dinmico o tamanho de um vetor tem que ser determinado em tempo de compilao
int alunos; int notas [ alunos ]; : : : printf (entre com o nmero de alunos); scanf (%d, &alunos);
NO ACEITO !!!
Introduo Linguagem C
Ex:
Introduo Linguagem C
C no realiza verificao de limites em vetores nada impede o acesso alm do fim do vetor faa sempre que necessrio a verificao dos limites
Introduo Linguagem C
#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 ]; : : : }
int values[5], i, max; printf("Entre com 5 numeros:\n"); for( i = 0; i < 5; ++i ) scanf("%d", &values[i] ); max = maximum( values ); printf("\nValor Maximo: %d\n", max );
}
Introduo Linguagem C
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
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 )
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
Ex:
Lendo Strings
printf ( Digite seu nome: ); scanf ( %s, &nome[ 0 ] ); //scanf ( %s, nome ); printf ( Bom dia %c, nome[0] ); }
Introduo Linguagem C
Lendo Strings
Gets
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
Imprimindo Strings
printf puts
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
Strlen
retorna o tamanho do string - no conta \0
Sada: Digite seu nome: Jose Maria Tamanho = 10
printf ( Digite seu nome: ); gets ( &nome[ 0 ] ); printf (Tamanho = %d, strlen(&nome[ 0 ]) );
}
Introduo Linguagem C
Ex: Sada: main ( ) Maria { JoseMaria char nome[40] = Jose, Cuidado: char sobrenome[30] = Maria; dado str1 + str2 tem que caber em strcat(nome, sobrenome); str1 puts (sobrenome); puts (nome); }
Introduo Linguagem C
Introduo Linguagem C
#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
Ponteiros
Ponteiros
int teste=20; int *p; p=&teste;
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.
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));
Introduo Linguagem C
Malloc e Free
Alocao dinmica
Introduo Linguagem C
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
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;
Podemos fazer atribuio de structs, do tipo conta2 = conta, e os valores sero idnticos. Para contar o nmero de caracteres de nome dentro da estrutura conta, podemos fazer:
Vetores de Estruturas
Arquivos - feopen( )
A funo fopen tem duas finalidades: - abrir uma fila de bytes - ligar um arquivo em disco quela fila
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
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
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); }
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
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); }
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
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); }
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.
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); }
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);
do {
putchar(ch); ch=getc(fp); } while( ch != $); fclose(fp); }