Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - [C] Lettura EOF da stdin
Forum - C/C++ - [C] Lettura EOF da stdin

Pagine: [ 1 2 3 4 ] Precedente | Prossimo
Avatar
Premoli (Normal User)
Pro


Messaggi: 108
Iscritto: 25/06/2009

Segnala al moderatore
Postato alle 8:25
Venerdì, 27/05/2011
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++

  1. #include <stdio.h>
  2.  
  3. int main()
  4. {
  5.     char c;
  6.  
  7.     while(c!=EOF){
  8.         c=fscanf(stdin, "%c", &c);
  9.     }
  10.  
  11.  
  12.     return 0;
  13. }



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
PM Quote
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1792
Iscritto: 26/06/2009

Segnala al moderatore
Postato alle 10:46
Venerdì, 27/05/2011
il codice EOF non ci sta in un "char".
Usa un int ;)

PM Quote
Avatar
Premoli (Normal User)
Pro


Messaggi: 108
Iscritto: 25/06/2009

Segnala al moderatore
Postato alle 14:56
Venerdì, 27/05/2011
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?

PM Quote
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1792
Iscritto: 26/06/2009

Segnala al moderatore
Postato alle 16:30
Venerdì, 27/05/2011
Testo quotato

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 :-)

PM Quote
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1792
Iscritto: 26/06/2009

Segnala al moderatore
Postato alle 17:13
Venerdì, 27/05/2011
Testo quotato

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 :-)

PM Quote
Avatar
Premoli (Normal User)
Pro


Messaggi: 108
Iscritto: 25/06/2009

Segnala al moderatore
Postato alle 17:43
Venerdì, 27/05/2011
Si si questo lo sapevo, comunque continua a non funzionare, ti faccio vedere come ho modificato l'esempio precedente.

Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2.  
  3. int main()
  4. {
  5.     int i;
  6.  
  7.     do{
  8.         i=getchar();
  9.     }while(i!=EOF);
  10.  
  11.  
  12.     return 0;
  13. }



così continua a darmi lo stesso identico "problema" che ho descritto prima, probabilmente mi sfugge qualcosa.

PM Quote
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1792
Iscritto: 26/06/2009

Segnala al moderatore
Postato alle 18:03
Venerdì, 27/05/2011
l'End Of File è il CTRL-D non il CTRL-Z

PM Quote
Avatar
Premoli (Normal User)
Pro


Messaggi: 108
Iscritto: 25/06/2009

Segnala al moderatore
Postato alle 18:08
Venerdì, 27/05/2011
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...

PM Quote
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1792
Iscritto: 26/06/2009

Segnala al moderatore
Postato alle 18:17
Venerdì, 27/05/2011
boh.. ho finito le idee :-|

PM Quote
Pagine: [ 1 2 3 4 ] Precedente | Prossimo