Salve a tutti, da poco ho iniziato all'università la programmazione in C, linguaggio che, a mio parere è molto interessante e pieno di potenzialità!
Sto seguendo il libro di testo di Kerninghan e Ritchie "Il Linguaggio C, principi di programmazione e manuale di riferimento" e, proprio su questo testo, sono riportati frammenti di codici sui quali lavorare e fare esercizio, e proprio su questi ho incontrato dei problemi:
in un primo esercizio mi viene chiesto di scrivere un codice che, data una stringa, la ricopi e ristampi tale e quale. Il codice, copiato rigorosamente dal libro è il seguente:
#include <stdio.h>
#include <stdlib.h>
main()
{
int c;
c = getchar();
while(c != EOF){
putchar(c);
c = getchar();
}
}
Fin qui tutto ok, viene introdotto il comando EOF che si attiva non appena clicco invio;
Ora vado a creare un programma che conti il numero di caratteri in una stringa, il codice, sempre copiato dal libro è il seguente:
#include <stdio.h>
#include <stdlib.h>
main()
{
long nc;
nc = 0;
while(getchar() != EOF)
++nc;
printf("%ld\n" , nc);
}
e qui, ho il problema che, il programma non riconosce la fine dell'input, e anche cliccando invio, rimane comunque in attesa di caratteri da inserire senza stamparmi mai nc.
Ora mi chiedo, perchè nel primo funziona e nel secondo no? EOF corrisponde ad un comando particolare? e perchè nel primo programma viene eseguito alla pressione del tasto d'invio?
Spero riusciate a togliermi questo problema, grazie dell'attenzione