EOF panico

di Anonimizzato15930 il
16 risposte
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

  • Ctrl+Z per sistemi Windows

    Ctrl+D per sistemi Linux
  • 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..
  • Hai usato i tasti che ti hanno suggerito?
  • 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?
  • 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
  • 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
  • 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à
  • Vbextreme
    Hai centrato in pieno la risposta che volevo sapere sei stato molto esaustivo grazie ancora!!
  • Centrare la risposta avendo una domanda sbagliata è veramente difficile ...
  • Oregon lo sai che sono er meio

    A quando una
  • 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
  • 
    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....
  • Grazie mille ragazzi mi avete tolto un gran bel dubbio..
  • 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