End
Of File (EOF)
Hoje
irei falar sobre o End Of File (EOF) conhecido como
Final de Arquivo. O EOF pode ser utilizado em um programa
quando você for fazer um programa que leia um arquivo de texto com
um número indeterminado de linha.
Para
fazermos o teste usaremos o terminal do Linux e a IDE de trabalho
CodeBlocks.
O
processamento utilizado sera um processamento qualquer, que no caso
faz a inversão de cada linha, lembrado é um processamento qual quer
ele não se restringe só neste que irei mostrar.
faça
o seguinte código:
void
limparBuffer(void){
char
c;
while
((c=getchar())!='\n'&& c!=EOF);
}
int
main(){
char
str[tam];
int
c,i;
while(scanf("%[^\n]",str)!=EOF){
c=strlen(str);
for(i=c;i>=0;i--){
printf("%c",str[i]);
}
printf("\n");
limparBuffer();
}
Como
já foi dito em um Post anterior, nós usaremos a função de Limpeza
de Buffer para limpar o buffer e não atrapalhar na leitura do nosso
arquivo, o EOF aparece tanto na função quanto no código. Na função
ele aparece para limpa caractere por caractere ate que seja
encontrado o Enter ou ate que seja encontrado o EOF que é o nosso
caso. Já no código ele é usado para ler varias linhas de um
arquivo ate que acabe, quando acabar ele retorna o EOF que
consecutivamente para o programa ali.
Agora
faremos um arquivo de texto de preferencia .txt com o nome de in.txt
(de input) que recebera o algumas linhas. Este arquivo tem que ficar
dentro da pasta raiz do programa para ser executado com maior
facilidade.
Andre
Athos
Fernando
Leticia
Agora
iremos executar o programa, para executar no terminal faça o
seguinte. Aperte Ctrl+F9 no CodeBlocks para somente compilar o
programa, olhe no build log para saber se houve algum erro, caso não
tenha vá para a pasta onde o código fonte do programa esta pelo
terminal e faça o seguinte código: “./nome_do_programa <
in.txt”, caso não tenha usado a função de limpeza de buffer ele
entrara em loop pois ira ler somente a primeira linha infinitamente e
não encontra o EOF para poder para, dando algo parecido com isso:
erdnA
erdnA
erdnA
erdnA
erdnA
erdnA
...
Caso
tenha dado certo o resultado deve ser parecido com esse:
erdnA
sohtA
odnanreF
aiciteL
Bom
pessoal espero que tenha gostado e ate mais.