EOF panico

di il
16 risposte

EOF panico

Salve ragazzi ho un piccolo inconveniente..
Mi sto proprio adesso interfacciando con il linguaggio C e ho un problema a capire come viene usata EOF.
Praticamente ho un ciclo con:

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

non riesco a capire quando immetto il valore da tastiera con quale valore il ciclo termina e di conseguenza il programma. Spero di essere stato chiaro.

16 Risposte

  • Re: EOF panico

    Ctrl+Z per sistemi Windows

    Ctrl+D per sistemi Linux
  • Re: EOF panico

    No dicevo io qnd termina da solo il ciclo? non devo farlo terminare io ammesso che finisca..
    Cioè io nn riesco a capire il valore EOF che valore è?
    da quel che ho capito il ciclo si ripete sempre perchè EOF da tastiera non verrà mai inserito..
  • Re: EOF panico

    Hai usato i tasti che ti hanno suggerito?
  • Re: EOF panico

    Forse non mi sono spiegato bene.. voglio sapere quando termina il ciclo e il valore di EOF.. no che lo interrompo il il ciclo capito?
  • Re: EOF panico

    Il ciclo non termina finché non premi i tasti suggeriti, se vuoi terminarlo prima devi aggiungere il controllo sullo \n
    Per sapere il valore di eof facci un printf
  • Re: EOF panico

    Finalmente.. ah quindi EOF non temina mai il ciclo.. capito! Che senso ha allora fare un ciclo con questo valore?
    Si può stampare il valore di EOF? allora provo.. Grazie mille
  • Re: EOF panico

    L'input utente può terminare solo in due circostanza
    1- si preme enter ('\n')
    2 - si preme EOF ( ctrl + D o Z )
    in questo caso si controlla EOF.

    cosi:
    
    while ( (c=getchar()) != '\n')
    
    si controlla quando viene premuto l'enter

    cosi:
    
    while ( (c=getchar()) != EOF)
    
    si controlla quando viene premuto ctrl + D/Z

    e cosi:
    
    while ( (c=getchar()) != '\n' && c != EOF)
    
    si controllano entrambe le possibilità
  • Re: EOF panico

    Vbextreme
    Hai centrato in pieno la risposta che volevo sapere sei stato molto esaustivo grazie ancora!!
  • Re: EOF panico

    Centrare la risposta avendo una domanda sbagliata è veramente difficile ...
  • Re: EOF panico

    Oregon lo sai che sono er meio

    A quando una
  • Re: EOF panico

    Il valore di EOF e' -1 (basta andare a cercare la #define con cui viene definito). E stampabile, ma esce una schifezza perche' viene convertito nel carattere 255 e questo carattere non e' presente nella mappa dei caratteri che si usa di solito. Quindi esce un simbolo di default, generalmente un quadratino.

    Viene ritornato quando si tenta di leggere oltre l'ultimo byte disponibile in un file, e con con ctrl-z/ctrl-d si dice al processo che lo standard input stream, cioe' lo stream associato alla tastiera, e' terminato
  • Re: EOF panico

    
    printf("%d\n",EOF);
    
    Il valore è stampabile ovvero si può vedere il suo valore ma non corrisponde ad un carattere ascii visualizzabile se non con un bel quadratino.

    EOF corrisponde a -1 anche se nessuno standard lo definisce, pertanto sarebbe sempre opportuno verificare con una printf o cercandosi la definizione nel file "stdio.h"

    Migliorabile sei stanco?
    Mi aspettavo un post lungo lungo....
  • Re: EOF panico

    Grazie mille ragazzi mi avete tolto un gran bel dubbio..
  • Re: EOF panico

    Ciao a tutti,

    sfrutto il post del nostro amico perchè anch'io stò sperimentando
    EOF, getchar, ecc...

    se però sbaglio fatemi sapere che apro post specifico.

    Il mio programma è il seguente:

    #include <stdio.h>

    main()
    {
    int c;

    c = getchar();

    while(c = getchar() != EOF)
    {
    putchar(c);
    printf("\n");
    printf("valore di c: %d\n", c);
    fflush(stdin);
    printf("\n EOF = %d \n", EOF);
    c = getchar();
    }

    printf("fine programma");
    fflush(stdin);
    getchar();

    }

    ho fatto un pò di prove per verificare il valore e funziomento dell'EOF ecc, tutto ok.

    Domande:

    il testo su cui stò studiando mi dice:

    "verifica che l'espressione getchar() != EOF abbia valore 0 o 1"

    Poichè non ho usato le parente, nel modo corretto -> while((c = getchar()) != EOF)
    != ha priorità sul resto e quindi "c" assume il valore 1.
    Ma quando assumerebbe il valore 0 ? Non riesco a trovare dei casi.

    Domanda 2: facendo il debug, dopo putchar(c); viene stampata una faccina.
    Come mai ?

    Grazie
Devi accedere o registrarti per scrivere nel forum
16 risposte