Newsgroup: it.comp.lang.c++
Titolo: Aiuto C

Chi può aiutarmi ?
Essendo alle prime armi con il Linguaggio C ho acquistato come testo
LINGUAGGIO C (ANSI C) - BRIAN W. KERNIGHAN - DENNIS M. RITCHIE
della Jackson Libri e a pag.16 del manuale ho trovato come
codice :
#include <stdio.h>
main()
{ 
  int c;
 
  c = getchar() ;
  while(c != EOF)
  { putchar(c) ;
    c = getchar() ;
  }
}
/*il programma copia l'input sull'output*/
ma ciò che significa ?
il risultato parrebbe indifferente se il codice fosse (lo suppongo io) :
#include <stdio.h>
main()
{ 
  int c;
  c = getchar() ;
}
il carattere compare sempre sullo schermo anche se non vi è putchar(c) ,
quale significato dunque avrebbe tale comando in questo programma?
2° provate a compilarlo :
 in teoria dovrebbe rendere il dato in entrata dalla tastiera in uscita
 su video , quindi io provo 
       pigio 1 compare 1
       pigio 2 compare 2
       .................
       pigio a compare a
       etc.....
 la condizione di uscita dal ciclo WHILE è che (c != EOF)
 ma cos'è questo End Of File un tasto in particolare ?
 (ma non credo , comunque non riesco a capirlo)
come dunque va interpretata la frase del testo :
"...il problema consiste nel distinguere la fine dell'input dai
dati validi.La soluzione è data dal fatto che getchar ,quando 
non c'è più input ,ritorna un valore particolare che non può essere
confuso con alcun altro carattere reale .Questo valore è chiamato 
EOF..."  
Se potete consigliatemi anche qualcosa sul Web : una guida , o un manualetto.
grazie NeMo

Caro ReVeNgEr,
vedrò di risponderti come posso,
del resto anch'io sono un novellino.
EOF è una costante simbolica definita nel file
"stdio.h" tramite la direttiva al preprocessore "#define",
se apri il file stdio.h con un editor lo puoi facilmente trovare.
Se non sbaglio ai compilatori non è prescritto il valore
che deve assumere tale costante, anche se quasi sempre
vale "-1" (come ad es. per la Borland), in ogni caso il valore
non conta.
EOF viene restituito da funzioni di i/o quando viene raggiunto un segnale
di "fine file" nello "stream" dei dati: nel tuo caso ciò corrisponde a
quando
da tastiera viene introdotto ^Z (cioè quando premi CTRL+Z).
Il codice che riporti come esempio non è equivalente a quello che
hai poi riscritto tu;
il programma originale entra in un ciclo e continua a leggere dati da
tastiera finché non premi ^Z ed ha come effetto di visualizzare
ciò che hai digitato solo dopo che hai premuto RETURN, non
immediatamente dopo aver digitato un carattere, quindi non capiterà che:
pigio 1 vedo 1
pigio 2 vedo 2
ma :
pigio 1 pigio 2 pigio 3 pigio RETURN( cioè INVIO)
vedo 123
cioè il buffer di i/o viene scaricato sul video solo dopo RETURN,
apposta per mettere in evidenza il fatto che, anche se la putchar segue
immediatamente getchar, non si ha direttamente la visualizzazione
sul video, perché le due funzioni operano sullo "stream", mentre la
gestione del video avviene a "buffer".
Invece il programmino che hai scritto tu non fa nient'altro
che leggere un carattere ed assegnarlo a "c".
Mah, sarò stato chiaro ???
Ho un po' di dubbi...
Ciao
Roberto

EOF..."
Non e' altro che un demarcatore di fine file... è come il nil o NULL non è
un indirizzo se associato ad un puntantore...

 wrote in message
S2dA3.52409$6C.1...@typhoon.libero.it...


Sì, pareva anche a me che significasse End Of File, anche perché ne sono
sicuro.
End Of File è un valore (come il /n nelle stringhe) che indica la fine del
file. Viene utilizzato solitamente nei database. Un classico per i database
che usavano date per lavorare quando non si era ancora in grado di
sviluppare un sistema di inserimento automatico della fine era inserire la
data 9/9/99, cosa che ha creato non pochi problemi proprio quel giorno...
Diego Pettenò