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.