Salve,
ho un problema con un algoritmo per contare le parole da stdin. Premetto che avevo fatto la mia versione semplice semplice, ma questo algoritmo è un tantino più elaborato. L'ho copiato pari pari dalla dispensa della professoressa, di cui vi includo il Link :
codice:
#include<stdio.h>
typedef enum {FALSE, TRUE} BOOLEAN;
BOOLEAN test( int c);
int main()
{
BOOLEAN is,fineParola=TRUE;
int c, nParole=0;
printf("\nScrivi una o piu' linee di testo. Per terminare ctrl z\n");
// leggi carattere iniziale della linea corrente */
c=getchar();
while (c!=EOF){
fineParola=TRUE;
/* leggi una linea e conta le parole*/
while(c!='\n'){ /* verifica se il carattere letto è un separatore */
is = test(c);
/* se il carattere e' un separatore e l'ultima
parola non è terminata incrementa il numero
di parole */
if(is && !fineParola) {
fineParola= TRUE;
nParole++;
}
else if (!is)
fineParola = FALSE;
c=getchar(); /*Leggi carattere c – della linea
corrente */
} /* fine scansione linea *
/* Verifica se l’ultimo carattere letto diverso da ‘\n’ definisce una nuova parola */
if( !is )
nParole++; /* se il penultimo carattere non e' un separatore*/
if (is && !fineParola ) {/* se il penultimo carattere e' un separatore e l'ultima parola non è terminata
incrementa il numero di parole */
nParole++;
c=getchar(); /* leggi primo carattere della linea successiva */
}
}
printf(" \n numero di parole =%d \n", nParole);
system("pause");
return 0;
}
BOOLEAN test ( int c)
/* restituisce TRUE se c è un separatore altrimenti FALSE */
{BOOLEAN ris;
ris = (c==' ')||(c=='\t')||(c==',')||(c==';')||(c=='.')||(c==':');
return ris;
}
Il problema è che il programma parte ma non funziona, cioè inserendo un testo qualunque e premendo invio si blocca, senza crashare.