karlettinos
04-08-2009, 10:27
Questo codice preso dal Kernighan doverbbe, secondo l'autore:
1) contare i caratteri digitati;
2) terminare il programma una volta finiti i caratteri immessi.
#include <stdio.h>
/*conta i caratteri*/
main()
{
int nc;
nc=0;
while (getchar()!=EOF)
++nc;
printf("%3d\n", nc);
}
Ma il risultato è questo:
MacBook-carlo:programmic carlo$ ./contchar1
kkkk
1
2
3
4
5
dove kkkk è la mia digitazione
e i numeri sono il conteggio.
Come si può notare i caratteri sono 4, e il conteggio ne rivela 5.
Poco male, si potrebbe impostare il contatore a -1.
Ma il problema è che dopo il quarto carattere getchar legge il carattere EOF (cioè la stringa è finita), ma invece di terminare ciclo e programma, come dichiarato dall'autore:
1) esegue ancora una volta il corpo del ciclo;
2) si posiziona ancora su getchar in attesa di nuovo input.
Infatti potete vedere che non è ricomparsa la riga di comando del terminale e dopo il 5 posso già digitare la nuova seq di carattere poichè il programma è ancora in funzione (cioè non è terminato).
Come faccio a realizzare un vero programma di conteggio caratteri che mi stampi solo il numero finale di caratteri e che termini il programma definitivamente?
Grazie a tutti!
Ciao!
k.
1) contare i caratteri digitati;
2) terminare il programma una volta finiti i caratteri immessi.
#include <stdio.h>
/*conta i caratteri*/
main()
{
int nc;
nc=0;
while (getchar()!=EOF)
++nc;
printf("%3d\n", nc);
}
Ma il risultato è questo:
MacBook-carlo:programmic carlo$ ./contchar1
kkkk
1
2
3
4
5
dove kkkk è la mia digitazione
e i numeri sono il conteggio.
Come si può notare i caratteri sono 4, e il conteggio ne rivela 5.
Poco male, si potrebbe impostare il contatore a -1.
Ma il problema è che dopo il quarto carattere getchar legge il carattere EOF (cioè la stringa è finita), ma invece di terminare ciclo e programma, come dichiarato dall'autore:
1) esegue ancora una volta il corpo del ciclo;
2) si posiziona ancora su getchar in attesa di nuovo input.
Infatti potete vedere che non è ricomparsa la riga di comando del terminale e dopo il 5 posso già digitare la nuova seq di carattere poichè il programma è ancora in funzione (cioè non è terminato).
Come faccio a realizzare un vero programma di conteggio caratteri che mi stampi solo il numero finale di caratteri e che termini il programma definitivamente?
Grazie a tutti!
Ciao!
k.