Oppure

Loading
27/05/11 6:25
Premoli
Ciao a tutti!!

Ho la necessità di leggere EOF da stdin, però non riesco a capire una cosa, faccio un esempio per spiegarmi meglio.

#include <stdio.h>

int main()
{
    char c;

    while(c!=EOF){
        c=fscanf(stdin, "%c", &c);
    }


    return 0;
}


Non riesco a capire perché se con questo codice scrivo ciaoCTRL+z non si blocca immediatamente ma per bloccarsi mi "costringe" ad inserire nuovamente CTRL+z, mentre se prima di premere CTRL+z premo invio si blocca subito?

Spero di essermi spiegato bene, e grazie a tutti anticipatamente...
Ultima modifica effettuata da Premoli 27/05/11 6:26
aaa
27/05/11 8:46
TheKaneB
il codice EOF non ci sta in un "char".
Usa un int ;)
aaa
27/05/11 12:56
Premoli
Ciao grazie per la risposta, però non ho capito cosa intendi...
O meglio ok EOF non ci sta in un char, e mi hai consigliato di usare un int, il problema è che io devo acquisire un char...Probabilmente non ho capito bene... Potresti fare un esempio?
aaa
27/05/11 14:30
TheKaneB
Postato originariamente da Premoli:

Ciao grazie per la risposta, però non ho capito cosa intendi...
O meglio ok EOF non ci sta in un char, e mi hai consigliato di usare un int, il problema è che io devo acquisire un char...Probabilmente non ho capito bene... Potresti fare un esempio?


usa getchar() e memorizza il risultato in una variabile int.
non farti ingannare dal nome del tipo, sia char che int sono numeri interi, solo che i char hanno 8 bit e gli int ne hanno di più (tipicamente 16 o 32 in base al compilatore ed al sistema operativo). Quindi puoi tranquillamente usare una variabile int anche quando ti servono caratteri ASCII :-)
aaa
27/05/11 15:13
TheKaneB
Postato originariamente da Premoli:

Ciao grazie per la risposta, però non ho capito cosa intendi...
O meglio ok EOF non ci sta in un char, e mi hai consigliato di usare un int, il problema è che io devo acquisire un char...Probabilmente non ho capito bene... Potresti fare un esempio?


usa getchar() e memorizza il risultato in una variabile int.
non farti ingannare dal nome del tipo, sia char che int sono numeri interi, solo che i char hanno 8 bit e gli int ne hanno di più (tipicamente 16 o 32 in base al compilatore ed al sistema operativo). Quindi puoi tranquillamente usare una variabile int anche quando ti servono caratteri ASCII :-)
aaa
27/05/11 15:43
Premoli
Si si questo lo sapevo, comunque continua a non funzionare, ti faccio vedere come ho modificato l'esempio precedente.

#include <stdio.h>

int main()
{
    int i;

    do{
        i=getchar();
    }while(i!=EOF);


    return 0;
}


così continua a darmi lo stesso identico "problema" che ho descritto prima, probabilmente mi sfugge qualcosa.
aaa
27/05/11 16:03
TheKaneB
l'End Of File è il CTRL-D non il CTRL-Z
aaa
27/05/11 16:08
Premoli
niente, anzi con il CTRL-D non termina proprio...
Boh è strano come fatto però, non capisco perché se prima del CTRL-z premo invio allora poi tutto funziona correttamente...
aaa