1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

EOF - End of File

Discussão em 'Programação' iniciada por Luka, 31 de Outubro de 2004. (Respostas: 36; Visualizações: 5136)

  1. Luka

    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)
     
  2. Madril

    Madril 1st Folding then Sex

    End of file = Fim do ficheiro .... acho que é Ctrl+D se a minha memoria não me engana
     
  3. Luka

    Luka I folded Myself

    Se eu fizer ctrl+d nao acontece nada. :(
     
  4. Madril

    Madril 1st Folding then Sex

    Tas em linux ... certo ?
     
  5. Luka

    Luka I folded Myself

    Não :S Porque?
     
  6. Tafinho

    Tafinho Power Member

    E que tem o valor de ZERO (0)
     
  7. JPgod

    JPgod Moderador
    Staff Member

    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
     
  8. Luka

    Luka I folded Myself

    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
     
  9. kanguru

    kanguru [email protected] Member

    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 :)
     
  10. JPgod

    JPgod Moderador
    Staff Member

    pois, para guardar um char utiliza-se:

    Código:
    char c;
    o tipo INT é para numeros inteiros ;)
     
  11. Luka

    Luka I folded Myself

    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?
     
  12. Luka

    Luka I folded Myself

    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 :)
     
  13. AwakE

    AwakE Banido

    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 ;)
     
  14. JPgod

    JPgod Moderador
    Staff Member

    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:
     
  15. kanguru

    kanguru [email protected] Member

    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 :)
     
  16. Luka

    Luka I folded Myself

    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?
     
  17. kanguru

    kanguru [email protected] Member

    Ctrl + D

    Se tiveres em linux.
     
  18. AwakE

    AwakE Banido

    O que faz o getchar? Sem saber isso é dificil responder...
     
  19. Luka

    Luka I folded Myself

    o getchar atribui o valor que eu introduzir á variavel "c"

    c = getchar();

    Estou em windows.
     
  20. AwakE

    AwakE Banido

    É um questão de descobrires quais as teclas para inserir um EOF.
     

Partilhar esta Página