Aprendendo a Programar Programando em Linguagem C - FSM
Aprendendo a Programar Programando em Linguagem C - FSM
Aprendendo a Programar Programando em Linguagem C - FSM
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
{<br />
FILE *p;<br />
p = fopen(s, "rb");<br />
if (p == NULL)<br />
return(0);<br />
else<br />
{<br />
fclose(p);<br />
return(1);<br />
}<br />
}<br />
Assim a função CriaArquivo() definida anteriormente deveria ser escrita da seguinte forma:<br />
FILE *CriaArquivo(char s[12])<br />
{<br />
FILE *p;<br />
p = fopen(s, "rb");<br />
if (p == NULL)<br />
{<br />
p = fopen(s, "wb");<br />
return(p);<br />
}<br />
else<br />
printf("\a Arquivo %s já existe!");<br />
}<br />
Localizando um registro num arquivo<br />
Uma operação muito comum <strong>em</strong> arquivos é a verificação de que um determinado registro está nele<br />
armazenado. Esta operação é normalmente (como já foi dito no capítulo 7) chamada consulta, pesquisa ou<br />
busca e deve ser feita de acordo com o valor da chave do registro ou de um outro campo que, relativamente,<br />
identifique o registro. No ex<strong>em</strong>plo que estamos discutindo, a consulta pode ser feita pelo campo Mat (de<br />
matrícula) ou pelo campo Nome. Em geral, a consulta se processa com a localização do registro, a<br />
consequente exibição do seu conteúdo e o retorno da posição que ele ocupa no arquivo.<br />
A localização do registro pode ser feita, abrindo-o com fopen() e o percorrendo até que o valor da<br />
chave seja encontrado; a exibição do seu conteúdo pode ser feita através das funções fread() e fprintf(), e a<br />
posição que ele ocupa no arquivo é fornecida por uma das funções fgetpos() e ftell() que possu<strong>em</strong> os<br />
protótipos<br />
int fgetpos(FILE *p, fpos_t *pos);<br />
long ftell(FILE *p);<br />
onde, na primeira, fpos_t é um tipo de dado pré-definido.<br />
Nas duas funções, p receberá o ponteiro associado ao arquivo onde está se realizando a pesquisa; a<br />
posição do registro pesquisado (dada pela ord<strong>em</strong> do último byte ocupado pelo último campo deste registro) é<br />
armazenada na variável cujo endereço for passado para o parâmetro pos de fgetpos() ou será retornado pela<br />
função ftell(). Como <strong>em</strong> vetores, o primeiro byte ocupado pelo primeiro campo do primeiro registro é o de<br />
ord<strong>em</strong> zero.<br />
/*Função que verifica se um registro com matricula dada pertence ao arquivo, retornando sua posição<br />
no arquivo*/<br />
int ConsultaRegistro(char s[12], char s1[12])<br />
{<br />
FILE *p;<br />
int Achou = 0;<br />
struct TRegistro r;<br />
fpos_t Byte;