Premoli (Normal User)
Pro
Messaggi: 108
Iscritto: 25/06/2009
|
Ciao a tutti!!
Ho la necessità di leggere EOF da stdin, però non riesco a capire una cosa, faccio un esempio per spiegarmi meglio.
Codice sorgente - presumibilmente C++ |
#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 il 27/05/2011 alle 8:26 |
|
TheKaneB (Member)
Guru^2
Messaggi: 1792
Iscritto: 26/06/2009
|
il codice EOF non ci sta in un "char".
Usa un int
|
|
Premoli (Normal User)
Pro
Messaggi: 108
Iscritto: 25/06/2009
|
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?
|
|
TheKaneB (Member)
Guru^2
Messaggi: 1792
Iscritto: 26/06/2009
|
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 :-) |
|
TheKaneB (Member)
Guru^2
Messaggi: 1792
Iscritto: 26/06/2009
|
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 :-) |
|
Premoli (Normal User)
Pro
Messaggi: 108
Iscritto: 25/06/2009
|
Si si questo lo sapevo, comunque continua a non funzionare, ti faccio vedere come ho modificato l'esempio precedente.
Codice sorgente - presumibilmente C++ |
#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.
|
|
TheKaneB (Member)
Guru^2
Messaggi: 1792
Iscritto: 26/06/2009
|
l'End Of File è il CTRL-D non il CTRL-Z
|
|
Premoli (Normal User)
Pro
Messaggi: 108
Iscritto: 25/06/2009
|
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...
|
|
TheKaneB (Member)
Guru^2
Messaggi: 1792
Iscritto: 26/06/2009
|
boh.. ho finito le idee
|
|