Due parole sull'input degli array di caratteri. I pigri si limitino a leggere l'input con: scanf("%c\n",w[i]); supponendo che w sia l'array su cui caricate la parola che state leggendo. I curiosi leggano quanto segue. Purtroppo, l'istruzione scanf("%c",&w[i]) dentro un ciclo vi puo' dare problemi. Il motivo, un po' tecnico, è il seguente. scanf effettivamente legge un carattere aspettando che venga premuto RETURN. Ma RETURN stesso produce un carattere, che è proprio il carattere '\n'. (cosa effettivamente '\n' significhi dipende dal sistema! -- ed è diverso tra Unix/Linux, Mac, e Windows -- il compilatore C è implementato in modo tale che i programmi, si comportino allo stesso modo). In ogni caso, indipendentemente dal sistema, il sistema "bufferizza" (cioè memorizza) i caratteri introdotti da tastiera, cioè gli memorizza e via via il vostro programma li processa. Se voi premete 'r' e poi invio, in realtà spedite al sistema due caratteri. La prossima scanf("%c", w[i]); eseguita, caricherà in w[i] il carattere '\n'. Viceversa, la scanf("%c\n", w[i]); "assorbe" il carattere invio. Detto questo, mi sento abbastanza in colpa, da fornirvi una procedura per leggere una parola (nell'homework dovete leggere due parole... vedete voi cosa fare, ovviamente *m comunicherà al chiamante il numero di elementi della parola letta) void inputw(char a[], int* m){ int j=0; while (1) { scanf("%c\n",&a[j]); if (a[j]=='*') break; j++; } *m=j; } Per essere convinti che tutto vada a buon fine, provate il vostro programma (supponiamo si chiami a.out) nel seguente modo: > ./a.out < pippo.txt Dove pippo.txt è un file che risiede nella stessa directory e il cui contenuto è (compresi gli accapo): t o n o * o n o r e *