EOF - End of File

Luka

I folded Myself
Andava eu todo contente a seguir este tutorial http://freebooks.by.ru/view/CProgrammingLanguage/kandr.html quando me falam em EOF - End of file

Sou muito noob nisto e o meu inglês nao é nada de espectacular. Nao percebo o que é um EOF.

Fiz o programa que la manda que é este.

Código:
#include < stdio.h >
main()
{
int c;

c = getchar();
while (c != EOF) 
{
putchar(c);
c = getchar();
}
}

Ja percebi que o que o programa faz é devolver o valor introduzido até ser digitado um EOF. Mas o que raio é um end of file? :confused:

Ja agora, outra perguntinha. Como é que uma variavel inteira consegue guardar uma palavra? É por ter o getchar? Porque nao utilizar a variavel como char já que esta engloba numeros e caracteres?

EDIT: porque é que nao dá para escrever < stdio.h > sem os espaços entre os parenteses e a palavra? (Aqui no forum)
 
Madril disse:
End of file = Fim do ficheiro .... acho que é Ctrl+D se a minha memoria não me engana
O EOF serve tipo para leituras e escritas de ficheiros, é para alertar ao programa quando chega ao fim do ficheiro, faz qq coisa, em geral acabar o ciclo de escrita/leitura

também existe o EOL (End Of Line)
No teu caso:
Código:
while (c != EOF)
{
//...
}

O que isso faz?
Enquanto c não for o fim do ficheiro (o operador ! significa negação), o ciclo continua a executar as instrunções entre as { }

;)
p.s.- Realmente, se por < stdio.h > junto, simplesmente, desaparece 8o
 
Hum.. Nao estou a perceber muito bem o que voces estao a dizer :(

O que eu percebo do programa é que vai ler o valor que eu introduzir e escreve-lo até eu introduzir um EOF.

Ou seja, se eu introduzir um A ele vai escrever o A
Se eu introduzir um B ele vai escrever um B

e assim sucessivamente até ser introduzido um EOF que eu entendo como sendo um caracter ou um conjunto de caracteres que ele identifica com sendo EOF e faz o programa parar de repetir o que eu introduzo.

Am I right? :confused:

EDIT: Eu avisei que era noob :p
 
realmente não percebo pq usam um inteiro pa guardar char's, mas é possivel, visto que um inteiro usa 32bit's e um char 8bit... cabe la dentro na b0a :)

quanto ao EOF é p que o pessoal ja referiu :)
 
kanguru disse:
realmente não percebo pq usam um inteiro pa guardar char's, mas é possivel, visto que um inteiro usa 32bit's e um char 8bit... cabe la dentro na b0a :)

quanto ao EOF é p que o pessoal ja referiu :)

pois, para guardar um char utiliza-se:

Código:
char c;

o tipo INT é para numeros inteiros ;)
 
destr0yer disse:
O EOF serve tipo para leituras e escritas de ficheiros, é para alertar ao programa quando chega ao fim do ficheiro, faz qq coisa, em geral acabar o ciclo de escrita/leitura

também existe o EOL (End Of Line)
No teu caso:
Código:
while (c != EOF)
{
//...
}

O que isso faz?
Enquanto c não for o fim do ficheiro (o operador ! significa negação), o ciclo continua a executar as instrunções entre as { }

;)
p.s.- Realmente, se por < stdio.h > junto, simplesmente, desaparece 8o

Entao suponhamos que eu tenho este programa
Código:
#include<stdio.h>
main()
{
int c;
c = getchar();
while(c != EOF)
{
putchar(c);
c = getchar();
}
printf("LOL");
}

Ele vai repetir o que eu introduzir até eu introduzir um EOF. No momento em que eu introduzir um EOF ele vai digirar a palavra LOL e acabar o programa. É isto?
 
kanguru disse:
realmente não percebo pq usam um inteiro pa guardar char's, mas é possivel, visto que um inteiro usa 32bit's e um char 8bit... cabe la dentro na b0a :)

quanto ao EOF é p que o pessoal ja referiu :)

Eu também nao percebi essa do inteiro :\ Mas pronto, fiz como estava no tutorial. Por acaso experimentei com Char e como é logico também funcionava. Aliás, isto tb era uma duvida que tinha :)
 
Ele vai repetir o que eu introduzir até eu introduzir um EOF. No momento em que eu introduzir um EOF ele vai digirar a palavra LOL e acabar o programa. É isto?
Tu não te precisas de preocupar em colocar um EOF. Se criares um ficheiro .txt por exemplo, escreveres para lá "Hello!" e depois gravares, o caracter EOF é colocado automaticamente no fim.

Basicamente o programa vai lendo caracter a caracter, quando encontrar o EOF (ou fim de ficheiro) pára de ler, como tem lógica né? Se o ficheiro acabou não há mais nada para ler certo?

Se tiveres a ler caracteres do ecran, se meteres um EOF, o Crtl + D do Madril, ele sai do ciclo.

PS: Já nao me lembro o que faz o putchar e o getchar por isso...
PS2: Não deve ser preciso dizer isto, mas não uses o ZERO para terminar a leitura. O código ASCII do zero é 48, e não 0 ;)
 
AwakE disse:
Tu não te precisas de preocupar em colocar um EOF. Se criares um ficheiro .txt por exemplo, escreveres para lá "Hello!" e depois gravares, o caracter EOF é colocado automaticamente no fim.

Basicamente o programa vai lendo caracter a caracter, quando encontrar o EOF (ou fim de ficheiro) pára de ler, como tem lógica né? Se o ficheiro acabou não há mais nada para ler certo?

Se tiveres a ler caracteres do ecran, se meteres um EOF, o Crtl + D do Madril, ele sai do ciclo.

PS: Já nao me lembro o que faz o putchar e o getchar por isso...
ya...

O que eu costumo usar para leituras do ecran é por um ciclo FOR infinito e uma condição de paragem, um CTRL + D ou Z por exemplo e o ciclo acaba...
se nao existisse esta condição de paragem, se desse CTRL + D, entrava em ciclo infinito :lol:
 
A do inteiro é chamado casting. Penso eu de que. Podes por int a = 'A'; ele converte o char para inteiro, atraves do seu codigo ascii. Se meteres printf("%d",c); no teu programa, vai aparecer o codigo ascii em vez da letra. Pronto é so pa dizer que podes mudar o tipo de variavel como queres. Desde que saibas o que tas a fazer claro.

Que consideras interir um EOF? é que não é escrever EOF, é uma espécie de macro, que ao atingir o fim de um ficheiro, ou atravez de ctrl + d, se for pelo stdin, retorna 1. Por isso eh ke o usas para ler ficheiros :)

edit: ta mta gente neste topic a eskrever ao msm tempo lol :)
 
O melhor é perguntar assim:

O que tenho de fazer para sair do ciclo while e ser apresentado a paravra "LOL" neste programa?

Código:
#include
main()
{
int c;
c = getchar();
while(c != EOF)
{
putchar(c);
c = getchar();
}
printf("LOL");
}

É que o programa nao para de repetir o ciclo :S Se eu quiser sair do ciclo faço o que?
 
Back
Topo