Newsgroup: it.comp.lang.c
Titolo: novellino

uso il C++Builder3 su Win98
studio dal K&R
problema:
1)il programma di conteggio dei caratteri (tratto dal libro suddetto):
#include<stdio.h>
main()
{
    double nc;
    for (nc = 0; getchar() != EOF; ++nc)
        ;
    printf("%.0f\n", nc);
}
non visualizza alcun risultato...
io digito TOT caratteri, dò Invio, (dovrebbe visualizzare il n. dei
caratteri, no?), ma niente...
coma mai?
2)EOF... nell'esercizio precedente del libro, c'è
    while ((c=getchar()) != EOF) putchar(c);
quand'è che (c=getchar) è uguale a EOF???,
thanks
    Francesco

coma mai?
Perche' non e' questo che tu chiedi al tuo programma di fare :)
Mi spiego : non gli stai dicendo che deve visualizzare i risultati
della tua elaborazione quando si preme invio, ma quando si e'
raggiunta la fine del file di input.
"Quale file di input ?" ti starai chiedendo ed io ti rispondo subito :
il C vede la tastiera e lo schermo come due file : stdin e stdout,
rispettivamente.
Questo facilita molto le cose a chi sviluppa la libreria del
linguaggio, perche' non deve scrivere due routine diverse per gestire
la tastiera e i file, gli basta scrivere quella che manipola i file.
Questa funzione e' getc() che accetta come parametro il file da cui
leggere i caratteri.
getchar() e' in realta' una macro #definita come 
getc( stdin ) 
cioe' leggi un carattere dallo STandarD INput, che per default e' la
tastiera.
In fondo, la tastiera e' come un file, solo che in un file i caratteri
ci sono gia' belli e pronti, nel caso della tastiera e' l'utente che
li "pompa". 
Essendo l'utente a "pompare" i caratteri e' anche lui che decide
quando chiudere il rubinetto. Il rubinetto si chiude premendo Ctrl+Z
(in alternativa F6). Questa sequenza varia, comunque, da s.o. a s.o.
(sotto Unix e' CTRL+D). 
Quando getchar() (o meglio getc) si accorge che il rubinetto e' stato
chiuso, restituisce EOF (che quasi ogni compilatore #definisce come
-1).
Ecco, tra l'altro, il motivo per cui getc() restituisce un intero e
non un char (come ci si aspetterebbe). 
Quindi la sequenza per visualizzare il numero dei caratteri inseriti
sara' prima invio e poi ctrl+z.
Il numero di caratteri, ovviamente, contemplera' la presenza della
sequenza di invio (quindi sara' il numero effettivo + 1).
Se invece vuoi visualizzare il numero di caratteri immessi linea per
linea scrivi :
#include <stdio.h>
int main()
{
    int c ;
    for ( c = 0 ; getchar() != '\n' ; c++ ) ;
    printf( "%d\n", c ) ;
    return 0 ;        
}
Comunque, ti consiglio di passare ad un testo piu' aggiornato del K&R
(a proposito quale versione e' ?)
--
Andrea Laforgia (
andrea_...@bigfoot.com
)
"There is nothing better for understanding a kangaroo than seeing it jump."
[D.Grune, C.J.H. Jacobs]

Illuminante!!!!!
Grazie davvero
A proposito, l'edizione del K&R è la seconda,
gli stessi autori nella prefazione precisano che verso la fine dell'88
l'ANSI approverà (futuro quindi) lo standard finale del C.
Ho anche scaricato il Tricky C.
Che libro mi consigli?
Grazie ancora!

Che libro mi consigli?
Il primo sicuramente.



Perchè sconsigli il Tricky C, anche se sono ancora un novellino mi ha
aiutato molto (a parte i puntatori che sono un casino, mi sembra comunque il
miglior tutorial in italiano che ho trovato in rete...
ciao

> Hmm... non lo usare...

Io lo trovo poco adatto ad insegnare il C nella sua forma standard.
In quanto ad essere il miglior manuale, stiamo attenti a dare certi
giudizi, diciamo piuttosto che e' l'unico manuale ;)


 (a proposito quale versione e' ?)
Io consiglierei il grande C - Didattica e programmazione, di Kelley-Pohl,
Addison Wesley...
Comunque, fin'ora non si era consigliato il K&R tranquilamente,
considerandolo la bibbia del C?... :-)
--
Marco Iannaccone
marc...@tin.it
Nick: Tolkien
ICQ UIN: 18748121
"This is a new ship, boy, but she's got the right name...
You treat her like a lady, and she'll always bring you home"
"Questa è una nave moderna, ma ha un nome antico e glorioso...
Trattala come una signora e ti riporterà sempre a casa"
FAQ di it.comp.lang.c:
http://www.programmazione.it/linguaggi/c/itcomplangc.htm
FAQ di it.comp.lang.c++:
http://www.programmazione.it/linguaggi/c/lang_faq.htm

considerandolo la bibbia del C?... :-)
La II versione, non di certo la I, ormai troppo vecchia ;)
--
Andrea Laforgia (
andrea_...@bigfoot.com
)
---------------------------------------------------------------------------


 La II versione, non di certo la I, ormai troppo vecchia ;)
Anche se con il nuovo standard recentemente approvato forse il libro
andrebbe aggiornato alla III edizione. :-)
EMG

Forse hai ragione ma ne ho trovato anche altri ma pretendevanon di insegnare
il C in quattro pagine...


il C in quattro pagine...
E gia' :)
L'importante, comunque, e' non valutare la qualita' di un libro dal
numero di pagine. Quello che conta e' la qualita'.
Se uno mi sa insegnare il C, non dico in quattro, ma in 100 pagine,
che ben venga.
--
Andrea Laforgia (
andrea_...@bigfoot.com
)


> Perchè sconsigli il Tricky C
Alcune cose che insegna sono specifiche per i compilatori Borland e quindi
non valide per lo standard in generale.
--
________________________________
per rispondermi iliasba(at)
tin.it
bye Brain

 andrebbe aggiornato alla III edizione. :-)
Magari ! 
Ciao ciao,
Andrea
-- 
"...Unix, MS-DOS, and Windows NT (also known as the Good, the Bad, and 
 the Ugly)."
(by Matt Welsh)