Aprendendo a Programar Programando em Linguagem C - FSM
Aprendendo a Programar Programando em Linguagem C - FSM
Aprendendo a Programar Programando em Linguagem C - FSM
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
p = fopen(s1, "rb");<br />
fread(&r, sizeof(r), 1, p);<br />
while (!feof(p) && Achou == 0)<br />
if (strcmp(s, r.Mat) == 0)<br />
{<br />
fgetpos(p, &Byte);<br />
Achou = 1;<br />
}<br />
else<br />
fread(&r, sizeof(r), 1, p);<br />
if (Achou == 0)<br />
return (-1);<br />
else<br />
return(Byte);<br />
}<br />
Como no nosso ex<strong>em</strong>plo o tamanho da estrutura é de 48 bytes (4 bytes para o campo Mat, 40 para o<br />
campo Nome e 4 para o campo SalarioBruto), se o registro pesquisado for o primeiro a função retornará 48,<br />
se o registro pesquisado for o segundo, a função retornará retorna 96, se for o terceiro, a função retornará 144<br />
e assim por diante. Se o registro não estiver no arquivo, a função retornará –1.<br />
Quando o registro é encontrado, seu conteúdo está armazenado na estrutura r. Assim, para exibir o<br />
conteúdo do registro, basta no comando if (strcmp(s, r.Mat) == 0) incluir o comando<br />
printf("Matricula: %s \n Nome: %s \n Salario: %f \n", r.Mat, r.Nome, r.SalBruto);<br />
Para escrever a função acima com a função ftell() bastaria se substituir os comando fgetpos(p, &Byte)<br />
pelo comando Byte = ftell(p).<br />
Considerando que a instrução return() interrompe a execução de uma função, a função acima poderia<br />
prescindir da variável Achou:<br />
int ConsultaRegistro1(char s[12], char s1[12])<br />
{<br />
FILE *p;<br />
struct TRegistro r;<br />
fpos_t Byte;<br />
p = fopen(s1, "rb");<br />
fread(&r, sizeof(r), 1, p);<br />
while (!feof(p))<br />
if (strcmp(s, r.Mat) == 0)<br />
{<br />
fgetpos(p, &Byte);<br />
return(Byte);<br />
}<br />
else<br />
fread(&r, sizeof(r), 1, p);<br />
return (-1);<br />
}<br />
Optamos pela primeira versão pelo fato de que exist<strong>em</strong> linguagens que não possu<strong>em</strong> instruções do tipo<br />
return() e, nestas linguagens, teríamos de escrever a função como na versão inicial.<br />
Vale observar que as funções ConsultaRegistro() acima utilizam a pesquisa sequencial. Se os registros<br />
dos arquivos estiver<strong>em</strong> ordenados pelo campo Mat poderíamos ter utilizado a pesquisa binária, que, como<br />
estudado no capítulo 7, é b<strong>em</strong> mais eficiente.<br />
Alterando o conteúdo de um registro<br />
Às vezes, há necessidade de que os dados de um registro sejam alterados. No arquivo que estamos