[Prévia cron] [Próxima Cron] [Prévia por assunto] [Próxima por assunto]
[Índice cronológico]
[Índice de assunto]
[Índice de autor]
Re: Fim de arquivo
- Subject: Re: Fim de arquivo
- From: Demerson Andre Polli <polli@linux.ime.usp.br>
- Date: Fri, 15 Sep 2000 08:44:08 -0300 (BRT)
On Thu, 14 Sep 2000, Fabio Murilo wrote:
> Como identificar o fim do arquivo alunos.txt se não existe o numero de
> alunos como informacao e nenhuma marcação de fim, e o comando EOF não
> funciona
>
> Fabio
>
O que ocorre com a funcao feof() eh o seguinte:
Imagine um arquivo de dados assim:
MAT001 <ENTER>
<ENTER>
<EOF>
Quando o seu programa ler a ultima disciplina, que eh MAT001, a funcao
feof() estara retornando FALSE. Entao, o programa continua a execucao...
Quando a proxima string for lida, ela estara vazia (nao existe nenhuma
disciplina sem nome!!!)... entao o programa teria que checar se a string
do nome da disciplina esta vazia para saber se acabaram os dados daquele
aluno. Apos a leitura desta string vazia a funcao feof() devera retornar
TRUE.
Uma outra situacao:
MAT001 <EOF>
Logo que o seu programa ler a string MAT001, a funcao feof() retorna
TRUE. Desta forma nao haveria problemas no programa.
Entao:
Eh interessante codificar um teste para a leitura da disciplina, como no
exemplo abaixo, usando o vetor disciplinas para armazenar os dados:
int main() {
char *disc[MAX_DISC][MAX_NOME_DISC];
int i;
...
i = 0;
while(!feof(fInput)) {
fscanf(fInput,"%s",&disc[i]);
// Se a string eh um string valido, entao i aponta o proximo elemento
// caso contrario sai do while(); e retorna para ler o proximo aluno.
if (strcmp(disc[i],"") != 0) i++; else break;
}
...
}
Se a string estiver vazia, entao os dados referentes aquele aluno jah
estao completos. Se nao existir outros alunos, entao termina a leitura dos
dados pois feof() = TRUE.
Pode ser que ocorra algum erro, na seguinte situacao:
Arquivo de dados:
MAT001 <ENTER>
<EOF>
Pois quando o programa ler a disciplina MAT001, ainda nao sera EOF. Apos
isso, ele tenta ler uma informacao que nao existe, e deve ocorrer algum
erro (isso se a string nao retornar "").
Espero ter ajudado.
Alias eu me esqueci de fazer este teste no meu EP... valeu pela pergunta,
ou seja, pela dica.
Um abraco,
Demerson Polli