Академический Документы
Профессиональный Документы
Культура Документы
Curso de Programao em C
Linguagem C
Florianpolis
2003
Linguagem C
Curso de Programao em C
SENAC
1 PREFCIO ...................................................................................................... 5
Histrico .......................................................................................................... 5
Caractersticas ................................................................................................ 6
2 ESTRUTURA BSICA DE UM PROGRAMA EM C ........................................ 7
Regras Gerais ................................................................................................. 7
Forma Geral de Funes................................................................................. 7
3 VARIVEIS ..................................................................................................... 8
Regras Gerais ................................................................................................. 8
Palavras Reservadas ...................................................................................... 9
Tipos de Variveis........................................................................................... 9
Declarando Variveis ...................................................................................... 9
Inicializando Variveis ..................................................................................... 9
Regras Gerais ............................................................................................... 10
4 OPERADORES ............................................................................................. 10
Aritmticos..................................................................................................... 10
Relacionais.................................................................................................... 10
Lgicos .......................................................................................................... 10
Bit a bit .......................................................................................................... 11
5 ENTRADA/SAIDA PELO CONSOLE ............................................................ 11
Funes de sada.......................................................................................... 11
Funes de entrada ...................................................................................... 13
6 ESTRUTURAS DE DECISO ....................................................................... 13
if .................................................................................................................... 13
?: ................................................................................................................... 14
switch ............................................................................................................ 14
7 ESTRUTURAS DE REPETIO .................................................................. 15
for .................................................................................................................. 15
while .............................................................................................................. 16
do... while ...................................................................................................... 17
Comandos Auxiliares .................................................................................... 17
8 FUNES..................................................................................................... 18
Declarao .................................................................................................... 18
Tipos ............................................................................................................. 18
9 CLASSES DE ARMAZENAMENTO .............................................................. 19
auto ............................................................................................................... 19
extern ............................................................................................................ 20
static .............................................................................................................. 20
register .......................................................................................................... 20
10 DIRETIVAS ................................................................................................. 21
#define........................................................................................................... 21
#undef ........................................................................................................... 21
#include ......................................................................................................... 21
3
1 PREFCIO
Esta apostila foi elaborada como guia de ensino da linguagem C, por
isso mostra-se de modo superficial e pouco detalhada.
Histrico
Algol
(1960, Europa)
BCPL
(Inglaterra)
B
(EUA Ken Thompson)
C
(1972, EUA Dennis Ritchie)
Migrou para microcomputadores
(Fim da dcada 70)
Regularizao
(1983/88 ANSI)
Turbo C
(1987 Borland)
A linguagem C foi primeiramente criada por Dennis M. Ritchie e Ken
Thompson no laboratrio Bell em 1972, baseada na linguagem B de Thompson
que era uma evoluo da antiga linguagem BCPL.
A linguagem ficou contida nos laboratrios at o final da dcada de 70,
momento que comeou a popularizao do sistema operacional UNIX e
consequentemente o C (o UNIX desenvolvido em C).
Os programas escritos em Assembler, como o dBase II e III, Wordstar,
Lotus 1.0 dente outros, tiveram seus fontes convertidos em C, originando como
exemplo o dBase III Plus, Lotus 2.0, MS-Word e MS-Excel. utilizado
amplamente no desenvolvimento de Sistemas Operacionais, Sistema
Gerenciador de Banco de Dados, aplicativos e utilitrios.
Caractersticas
Java
Pascal
Cobol
Fortran
Basic
C
Forth
Assembler
Mdio nvel
Baixo nvel
Linguagem compilada;
Cdigo fonte C
Compilao
Linkagem
Programa executvel
Linguagem estruturada;
Estruturada
Pascal
ADA
C
No estruturada
Fortran
Basic
Cobol
Toda funo deve ser iniciada por uma chave de abertura ({) e
encerrada por uma chave de fechamento (});
Toda funo procedida de parnteses ( );
Todo programa dever conter a funo main;
As linhas de cdigo so sempre encerradas por um ponto e vrgula;
A formatao dos programas completamente livre, mas temos por
convenincia manter a legibilidade;
Os comandos so executados na ordem em que foram escritos;
Os comentrios devem ser delimitados por /* no incio e */ no final.
Podem ser usados tambm os caracteres // para comentrios de uma
linha.
Exemplo
/* Calcula a rea de um circulo */
#include <stdio.h>
#include <conio.h>
float processa(float r);
void main(void)
{
float raio, area;
clrscr();
printf(Raio: ); scanf(%f, &raio);
area = processa(raio);
printf(rea: %f, area);
getche();
}
float processa(float r)
{
float a;
a=3.1415*r*r;
return(a);
}
3 VARIVEIS
um espao de memria que pode conter, a cada tempo um valor
diferente.
Regras Gerais
Palavras Reservadas
auto
do
goto
short
union
private
break
double
if
signed
unsigned
protected
case
else
int
sizeof
void
virtual
char
enum
long
static
volatile
const
extern
main
struct
while
continue
float
register
switch
class
default
for
return
typedef
public
Bits
0
8
16
32
64
32
8
16
Escala
sem valor
-128 a 127
-32768 a 32767
3.4E-38 a 3.4E+38
1.7E-308 a 1.7E+308
3.4E-38 a 3.4E+38
0 a 255
0 a 65535
Declarando Variveis
A forma de declarao de variveis a seguinte: tipo nome;
Exemplos
int K;
double valores;
float quadro;
char caracter;
Inicializando Variveis
Pode-se inicializar uma varivel
qualquer momento do algoritmo.
int c=8;
void main(void)
{
float tempo=27.25;
char tipo=C;
int x;
x=10;
c=c+x;
}
Regras Gerais
4 OPERADORES
Aritmticos
Sinal
=
+
*
/
%
++
--
Significado
atribuio
soma
subtrao
multiplicao
diviso
mdulo (resto da diviso)
incrementa de 1
decrementa de 1
Exemplos
a=5; c=B;
a=a+1; tot=salario+comissao;
tot=subtotal-desconto;
nota=nota*2;
comissao=lucro/4;
resto=8%3;
i++;
j--;
Relacionais
Sinal
>
>=
<
<=
==
!=
Significado
maior
maior ou igual
menor
menor ou igual
igual
diferente (no igual)
Lgicos
Sinal
&&
||
!
Significado
e (and)
ou (or)
no (not)
10
Bit a bit
Sinal
~
Significado
negao
&
and
or
or exclusivo
<<
deslocamento
esquerda
deslocamento
direita
>>
Exemplo
a=0000 0000 0110 1001 105
~a=1111 1111 1001 0110 -106
a=0000 0000 0110 1001 105
b=0000 0010 0101 1100 604
a&b=0000 0000 0100 1000 72
a=0000 0000 0110 1001 105
b=0000 0010 0101 1100 604
a | b=0000 0010 0111 1101 637
a=0000 0000 0110 1001 105
b=0000 0010 0101 1100 604
a^b =0000 0010 0011 0101 565
para
a=0000 0010 0101 1100 604
a<<3=0001 0010 1110 0000 4832
para
a=0000 0010 0101 1100 604
a>>3=0000 0000 0100 1011 75
Significado
nova linha (LF)
alerta (beep)
nova tela ou nova pgina (FF)
tab
retrocesso (BS)
nulo
aspas duplas
aspas simples
barra invertida
11
Cdigos de formatao
Cdigo
%c
%d
%i
%e
%f
%o
%s
%u
%x
Significado
caracter
inteiro decimal com sinal
inteiro decimal com sinal
notao cientfica
ponto flutuante
octal
string de caracteres
inteiro decimal sem sinal
hexadecimal
Exemplo
void main(void)
{
char cidade_A=X, cidade_B=Y;
float distanc=25.5;
printf(Cidade = %c \n, cidade_A);
printf(Distancia = %f Km\n, distanc);
printf(A %s %c esta a %f Km da %s %c,
cidade, cidade_A, distanc, cidade, cidade_B);
}
Tem-se
Cidade = X
Distancia = 25.5 Km
A cidade X esta a 25.5 Km da cidade Y
putchar(varivel caracter);
A funo putchar() exibe um caracter.
Exemplo
void main(void)
{
char letra=a;
putchar(letra);
}
12
Funes de entrada
scanf(expresso de controle, lista de argumentos);
A expresso de controle utiliza os mesmos cdigos de formatao da
funo printf() descritos acima.
A lista de argumentos deve consistir dos endereos das variveis. A
linguagem oferece um operador para tipos bsicos chamado operador de
endereo e referenciado pelo smbolo & que retorna o endereo da varivel.
Exemplo
scanf(%f, &x);
getche()
L um caracter do teclado e exibe na tela. No requer o pressionamento
da tecla Enter aps o caracter digitado.
Exemplo
ch=getche();
getch()
Semelhante a funo getche(), mas no exibe o caracter lido na tela.
Exemplo
ch=getch();
6 ESTRUTURAS DE DECISO
if
O comando if instrui o computador a tomar uma deciso simples. Se o
valor entre parnteses da expresso de controle for verdadeiro ele executa as
instrues, caso seja falso, as instrues sero ignoradas, ou executadas as
que esto contidas no bloco do else.
if (expresso de teste)
instruo1;
else
instruo2;
13
Exemplos
1)
if (X%2)
printf( X impar );
else
printf( X par );
2)
if (X<Y)
if (X<Z)
printf( X o menor ! );
else
printf( Z o menor ! );
else
if (Y<Z)
printf( Y o menor ! );
else
printf( Z o menor ! );
?:
O operador ?: (condio ternria) , como o nome indica, um operador
que necessita de trs operandos, que podem ser resultados de expresses.
Em certas situaes pode substituir a instruo if.
expresso_1 ? expresso_2 : expresso_3
Tem como resultado o valor de expresso_2 ou de expresso_3
consoante o valor de expresso_1 for verdadeiro (!=0) ou falso (==0)
respectivamente.
Exemplo
z = (a > b) ? a : b;
switch
A instruo switch faz com que um determinado grupo de instrues seja
escolhido entre diversos grupos disponveis. A seleo baseada no valor
corrente de uma expresso includa na instruo switch.
O corpo de cada case composto por qualquer nmero de instrues.
Geralmente a ltima instruo o break. O comando break causa a sada
imediata de todo o corpo do switch. Na falta do comando break, todas as
instrues aps o case escolhido sero executadas.
Quando a instruo switch executada, a expresso avaliada e o
controle transferido diretamente para o grupo de instrues correspondente
ao valor de expresso. Se nenhum case corresponder ao valor de expresso,
no ser selecionado nenhum dos grupos da instruo switch, exceto quando
for implementado o grupo default, que contm instrues que sero executadas
caso no seja selecionado nenhum dos grupos.
14
switch (varivel)
{
case valor1:
instrues;
break;
case valor2:
instrues;
break;
case valor3:
:
default:
instrues;
}
Exemplo
switch (opcao = getchar())
{
case V:
printf( Vermelho );
break;
case B:
printf( Branco );
break;
case A:
printf( Azul );
break;
default:
printf( Cor desconhecida ! );
}
7 ESTRUTURAS DE REPETIO
for
O lao for possui trs expresses, e til principalmente quando
queremos repetir algo uma quantidade fixa de vezes.
Dentro dos parnteses aps a palavra reservada for, h trs elementos
que controlam a ao da repetio. Em primeiro lugar h uma inicializao que
executada uma nica vez. O teste uma expresso relacional que a funo
testa no incio da repetio. O incremento, executado no final do loop aps a
execuo das instrues.
for(inicializao; teste; incremento)
{
instrues
}
15
Exemplo
for(a=1; a<100; a++)
{
printf(\n %i, a);
}
1.
2.
3.
4.
5.
Outros exemplos
for(; ;);
repetio infinita
for(i=0, j=9; i<=9, j>=0; i++, j--)
printf(\n %i %i, i, j);
while
O lao while utiliza os mesmos elementos do lao for, mas so
distribudos de maneira diferente no programa.
Se o teste for verdadeiro (diferente de zero), o corpo do lao while
executado uma vez e a expresso de teste avaliada novamente. Este ciclo de
teste e execuo repetido at que a expresso de teste se torne falsa (igual a
zero), ento o lao termina e o controle do programa passa para a linha
seguinte ao lao.
while (expresso teste)
{
instrues
}
Exemplo
while (conta < 10)
{
total=total + conta;
printf(conta = %i, total = %i, conta, total);
conta++;
}
16
do... while
Cria um ciclo repetido at que a expresso de teste seja falsa (zero). A
diferena do while que o mesmo testa a expresso, se satisfaz ento executa
as instrues, enquanto que o do...while executa as instrues e depois testa a
expresso.
do
{
instrues
}
while (expresso de teste);
Exemplo
do
{
y--;
x++;
}
while (y);
Comandos Auxiliares
break
Pode ser usado no corpo de qualquer estrutura de lao. Causa a sada
imediata do lao.
Exemplo
while (salrio>100)
{
scanf(%s, &nome);
if (nome == a)
break;
scanf(%i, &salario);
}
continue
O comando continue causa um desvio imediato no lao, ou seja, fora a
prxima interao do lao e ignora o cdigo que estiver abaixo.
17
Exemplo
while (salario>100)
{
scanf(%c, &nome);
if (nome == a)
{
salario=1000;
continue;
}
scanf(%i, &salario);
}
8 FUNES
Uma funo uma unidade de cdigo de programa autnoma
desenhada para cumprir uma tarefa particular.
A funo recebe um certo nmero de parmetros e retorna apenas um
valor.
Da mesma forma que so declaradas as variveis, deve-se declarar a
funo. A declarao de uma funo chamada de prottipo e uma instruo
geralmente colocada no incio do programa, que estabelece o tipo da funo e
os argumentos que ela recebe.
Declarao
tipo nome_funo(declarao dos parmetros)
void main(void)
{
a=nome_funo(lista dos parmetros);
}
tipo nome_funo(lista dos parmetros)
{
declarao das variveis locais
comandos;
return(valor);
}
Tipos
O tipo de uma funo determinado pelo tipo de valor que ela retorna
pelo comando return e no pelo tipo de seus argumentos.
Se uma funo for do tipo no inteira ela deve ser declarada. O valor
default inteiro (int) caso no for declarada.
18
Exemplos
float retorna um valor numrico real
int retorna um valor inteiro
void sem retorno
/* calcula a rea de uma esfera */
#define PI 3.14159
float area(int r);
void main(void)
{
int raio;
float area_esfera;
printf(Digite o raio da esfera: ); scanf(%i, &raio);
area_esfera=area(raio)
printf(A rea da esfera : %f, area_esfera);
}
float area(int r)
{
return(4*PI*r*r);
}
9 CLASSES DE ARMAZENAMENTO
Todas variveis e funes em C tem dois atributos: um tipo e uma classe
de armazenamento. Os tipos foram apresentados em captulos anteriores. As
classes de armazenamento so quatro:
auto
extern
static
register
(automticas)
(externas)
(estticas)
(em registradores)
auto
As variveis declaradas dentro de uma funo so automticas por
padro. Variveis automticas so as mais comuns dentre as quatro classes,
elas so criadas quando a funo chamada e destrudas quando a funo
termina sua execuo.
void main(void)
{
auto int i;
}
19
extern
Todas variveis declaradas fora de qualquer funo tm a classe de
armazenamento extern. Variveis com esse atributo so conhecidas por todas
as funes declaradas depois delas.
void main(void)
{
extrern int x;
}
A palavra extern no usada para criar variveis da classe extern e sim
para informar ao compilador que uma varivel em questo foi criada em outro
programa compilado separadamente e ser linkeditado junto a este para formar
o programa final.
static
Variveis static de um lado se assemelham s automticas, pois so
conhecidas somente nas funes que as declaram e de outro lado se
assemelham s externas, pois mantm seus valores mesmo quando a funo
termina.
Declaraes static tm dois usos importantes e distintos. O mais
elementar permitir a variveis locais reterem seus valores mesmo aps o
termino da execuo do bloco onde foram declaradas.
register
A classe de armazenamento register indica que a varivel associada
deve ser guardada fisicamente numa memria de acesso muito mais rpido
chamada registrador. Um registrador da mquina um espao de 16 bits onde
podemos armazenar um int ou um char.
Basicamente variveis register so usadas para aumentar a velocidade
de processamento.
Exemplo
#include <time.h>
void main(void)
{
int i,j;
register int m, n;
long t;
t=time(0);
for (j=0; j<5000; j++)
for (i=0; i<5000; i++);
printf(\n Tempo dos laos no register: %ld, time(0)-t);
20
t=time(0);
for (m=0; m<5000; m++)
for (n=0; n<5000; n++);
printf(\n Tempo dos laos register: %ld, time(0)-t);
}
10 DIRETIVAS
#define
A diretiva #define pode ser usada para definir constantes.
Sintaxe: #define <identificador> <valor>
Exemplo
#define PI 3.14159
#define begin {
#define end }
#define PRN(n) printf(%0.2f \n, n)
void main(void)
begin
float num;
num+=PI;
PRN(num);
end
Quando o compilador encontra a diretiva #define, ele procura a
ocorrncia do identificador e a substitui pelo valor.
#undef
A diretiva #undef remove a mais recente definio criada com #define.
Exemplo
#undef PI
/* cancela a definio de PI */
#include
A diretiva #include, como o nome sugere, inclui um programa fonte ou
um header file no cdigo fonte corrente, durante a compilao o compilador
substitui a diretiva #include do programa pelo contedo do arquivo indicado.
21
Exemplo
#include <stdio.h>
#include funcoes.c
#include c:\fontes\mouse.c
void main(void)
{
int a, b;
}
Quando o arquivo a ser includo estiver delimitado por < >, o caminho
de procura ser o diretrio c:\tc\include ou o diretrio configurado para conter
os header file. Quando delimitado por aspas ( ), o caminho de procura ser o
diretrio corrente ou o especificado na declarao da diretiva.
Geralmente, os arquivos de incluso ou header file tm o nome com a
extenso .h e esto gravados no diretrio include.
#if, #ifdef, #ifndef, #else, #endif
Estas diretivas so geralmente usadas em grandes programas. Elas
permitem suspender definies anteriores e produzir arquivos que podem ser
compilados de mais de um modo.
11 VETORES E MATRIZES
Vetor / Matriz
Um vetor ou matriz um tipo de dado usado para representar uma certa
quantidade de valores homogneos.
Regras
A linguagem C no valida limites dos vetores, cabe ao
programador verificar o correto dimensionamento;
O primeiro ndice o zero;
Vetores possuem uma ou mais dimenses, como conveno, os
vetores bidimensionais so chamados de matriz;
O nome do vetor desacompanhado de colchetes representa o
endereo de memria onde o mesmo foi armazenado.
Declarao
tipo var[tamanho];
Exemplos
int meses[12];
0
1
2
3
4
5
6
7
8
9
10 11
lixo lixo lixo lixo lixo lixo lixo lixo lixo lixo lixo lixo
22
float tabela[2][2];
lixo
lixo
/* matriz de 2x2 */
lixo
lixo
3 4
o \0
i
i
l
r
m
c
a
e
\0
\0
23
Lendo Strings
scanf()
A funo scanf() bastante limitada para a leitura de strings. A funo
considera o caracter espao como final de string, por exemplo, a leitura do
nome Silvia Maria de Jesus pelo scanf() (scanf(%s, &nome)) resultar em
apenas Silvia.
gets()
Funo prpria para leitura de string, a leitura delimitada pela tecla
Enter.
Exemplo
gets(nome); /* nome uma varivel do tipo string */
Imprimindo Strings
puts()
puts(nome);
puts(&nome[4]);
Marcos da Silva
cos da Silva
printf()
printf(%s, nome); Marcos da Silva
Funes de Manipulao de Strings
Essas funes esto declaradas no arquivo header string.h, sendo
necessrio ento a incluso do #include <string.h> no incio da implementao.
strlen()
Retorna o tamanho da string, a partir de um endereo da string at o
caracter anterior a \0.
Exemplos
char nome[ ] = Jose Carlos;
strlen(nome);
11
strlen(&nome[2]);
09
24
strcat()
Concatena duas strings.
Exemplos
char nome[ ] = Priscila;
char atividade[ ] = estuda;
strcat(nome, atividade);
strcmp()
Compara duas strings. Forma de uso, strcmp(string1, string2), retorna
um valor menor que 0 se string1 for menor que string2, igual a 0 se string1 for
igual a string2, maior que 0 se string1 for maior que string2.
Exemplo
printf(%i, strcmp(Ana, Alice));
strcpy()
Copia strings.
Exemplos
strcpy(nome,ANA);
strcpy(nome1, nome2);
13 ESTRUTURAS
Agrupamento de um conjunto de dados no similares sob um nico
nome, ou seja, estruturas so tipos de variveis que agrupam dados
geralmente desiguais. Os itens de dados de uma estrutura so chamados de
membros.
struct Estrutura
{
tipo varivel;
.
.
.
};
Estrutura nomex; declarao da varivel nomex do tipo Estrutura
Por meio da palavra-chave struct define-se um novo tipo de dado. Definir
um tipo de dado significa informar ao compilador o seu nome, tamanho em
bytes e o formato em que ele deve ser armazenado e recuperado na memria.
Aps ter sido definido, o novo tipo existe e pode ser utilizado para criar
variveis de modo similar a qualquer outro tipo.
25
...
...
...
100
1000
px
101
1001
py
...
...
...
1000
Z
x
1001
K
y
...
...
...
27
28
for (i=0;*aux;i++)
{
printf("%c",*aux);
aux++;
}
}
Ponteiro para Estrutura
Exemplo
struct TLivro
{
int reg;
char titulo[30], autor[30];
} livro;
TLivro *pont;
pont = &livro;
pont->titulo ou (*pont).titulo
Alocao Dinmica
Na Alocao Esttica (Vetores e Matrizes) na declarao da varivel
que se define o tamanho que a mesma ir ocupar na memria do computador e
este valor no pode ser alterado em tempo de execuo.
Ao contrrio da alocao esttica, na Alocao Dinmica pode-se alterar
em tempo de execuo o espao ocupado pelas variveis na memria do
computador.
aplicada quando no se sabe o quanto ser necessrio de memria do
computador para a resoluo dos problemas, uma aplicao bastante utilizada
a lista encadeada, podendo ser dos tipos pilhas, filas ou rvores.
Exemplo
/* Lista Encadeada do tipo Fila */
struct TReg
{
char nome[20];
TReg *prox;
};
void inserir(TReg **inic, TReg **fim);
void remover(TReg **inic, TReg **fim);
29
void main(void)
{
TReg *inic=NULL, *fim=NULL;
char op='1';
while (op!='3')
{
clrscr();
printf("\n1 - Inserir");
printf("\n2 - Remover");
printf("\n3 - Finalizar");
printf("\nOpcao: "); op=toupper(getche());
switch (op)
{
case '1':
inserir(&inic,&fim);
break;
case '2':
remover(&inic,&fim);
break;
}
}
}
void inserir(TReg **inic, TReg **fim)
{
TReg *p, *aux;
p=new(TReg);
printf("\nNome: "); gets(p->nome);
p->prox=NULL;
if (*fim)
{
aux=*fim; aux->prox=p;
}
*fim=p;
if (!*inic) *inic=p;
}
void remover(TReg **inic, TReg **fim)
{
TReg *p;
if (*inic)
{
p=*inic;
printf("\n%s removido.",p->nome);
*inic=p->prox;
if (!*inic) *fim=NULL;
delete p;
getche();
}
}
30
Funo
Abre um arquivo
Fecha um arquivo
Escreve um caracter em um arquivo
L um caracter de um arquivo
Escreve uma string em um arquivo
L uma string de um arquivo
para um arquivo o que printf() para o console
para um arquivo o que scanf() para o console
Escreve tipos de dados maiores que um byte em arquivo
L tipos de dados maiores que um byte em arquivo
Devolve verdadeiro se o fim de arquivo for atingido
Devolve verdadeiro se ocorreu um erro
Apaga um arquivo
Posiciona no arquivo em um byte especfico
31
Significado
Abre um arquivo texto para leitura
Cria um arquivo texto para escrita
Abre um arquivo binrio para leitura
Cria um arquivo binrio para escrita
Abre um arquivo texto para leitura e escrita
Cria um arquivo texto para leitura e escrita
Abre um arquivo binrio para leitura e escrita
Cria um arquivo binrio para leitura e escrita
do {
printf(Digite uma string (Enter para sair):\n ); gets(str);
strcat(str, \n);
fputs(str, fp);
} while (*str != \n);
fclose(fp);
}
Usando fread() e fwrite()
Estas duas funes so especficas para leitura e escrita de tipos de
dados mais complexos (maiores que um byte), como float, int ou estruturas.
Exemplo
/* Uma funcao para ler e outra para gravar uma matriz de
estruturas em arquivo */
struct TReg {
char nome[40];
char endereco[40];
char cidade[30];
char estado[03];
char cep[10];
} Registro[50];
/* Salva a matriz */
void salva(void)
{
FILE *fp;
int i;
if ((fp=fopen(Registro.dat, wb))==NULL)
{
printf(O arquivo no pode ser criado.);
return;
}
for (i=0; i<50; i++)
if (*Registro[i].nome)
if (fwrite(&Registro[i], sizeof(TReg), 1, fp)!=1)
printf(Erro de escrita no arquivo.);
fclose(fp);
}
33
/* Le a matriz */
void le(void)
{
FILE *fp;
int i;
if ((fp=fopen(Registro.dat, rb))==NULL)
{
printf(O arquivo no pode ser aberto.);
return;
}
inicializa();
for (i=0; i<50; i++)
if (fread(&Registro[i], sizeof(TReg), 1, fp)!=1)
{
if (feof(fp)) break;
printf(Erro de leitura no arquivo.);
}
fclose(fp);
}
/* Inicializacao da matriz nome[0] = \0 */
void inicializa(void)
{
int t;
for (t=0; i<50; t++) *Registro[t].nome = \0;
}
34
BIBLIOGRAFIA
SCHILDT, Herbert. C Completo e Total. Makron Books, So Paulo, 1996.
WIENER, Richard. Turbo C, passo a passo. Campus, Rio de Janeiro, 1991.
35