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 :
Il problema è che il programma parte ma non funziona, cioè inserendo un testo qualunque e premendo invio si blocca, senza crashare.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; }

Rispondi quotando