[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




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