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

Il K&R è giusto, solo che si rifeisce ai vecchi terminali, dove input e
output sono differenti. Per accorgerti della differenza, prova a compilarlo
con nome prova.exe, e poi digita:
c:\> copia > prova.txt
Il carattere EOF non compare sulle tastiere, poichè per la tastiera nei
sistemi interattivi non esiste un End Of File.
Però puoi simularlo con il tasto F6 o con la combinazione CTRL-Z.
Otterrai che a video non vedi niente, ma quello che scrivi su tastiera sarà
copiato sul file prova.txt.
Dopodichè digita:
c:> copia<prova.txt>prova2.txt
Adesso non avendo digitato niente, otterrai un nuovo file chiamato
prova2.txt che è una copia di prova.txt
Il carattere EOF non compare sulle tastiere, poichè per la tastiera nei
sistemi interattivi non esiste un End Of File.
Però puoi simularlo con il tasto F6 o con la combinazione CTRL-Z.
Alessandro Monti

 il carattere compare sempre sullo schermo anche se non vi è putchar(c) ,
Il codice EOF è la fine del file. Infatti il C++ tratta i dispositivi di
input/output quindi tastiera e video come se fossero dei file e quindi ogni
carattere che viene digitato sulla tastiera finisce sul file di input, ogni
carattere che viene mostrato a video finisce sul file di output.
EOF è quindi la fine del file che nel caso di input da tastiera coincide col
tasto CTRL-C o CTRL-BREAK (dipendende se sei sotto UNIX o DOS).
Comunque EOF è un carattere come tutti gli altri e quindi fa parte del
codice ASCHI


 tasto CTRL-C o CTRL-BREAK (dipendende se sei sotto UNIX o DOS).
No, CTRL-C o CTRL-BREAK termina il programma, non solo il flusso di input,
senza permettergli di completare le operazioni (la copia dell'ultimo
carattere sull'output per esempio).
Usando un buffer piu' grande di 1 carattere, l'effetto sarebbe evidente.
Per la redirezione dei flussi I/O, potresti guardare un vecchio manuale DOS
(o uno introduttivo di Unix). Capiresti l'importanza di avere diversi
flussi, anche solo copiando l'input sull'output.
In DOS e con una stampante puoi provare:
c:\> dir>prn
Otterrai la stampata del comtenuto della directory.
Oppure concatenando:
c:\> dir|sort>prn
otterrai la stessa lista ordinata.
In pratica i programmi che usano stdin e stdout possono essere considerati
dei filtri: quello che ti propone il K&R è esattamente (o quasi) il CAT di
unix (type del DOS).
Alessandro Monti