Il primo ciclo while

codice:
 while(fgets(str,MAXS,fp)!=NULL)
        sscanf(str,"%s %s",ita,eng);
legge tutte le parole dal dizionario ma non le memorizza in due vettori come sarebbe necessario e quindi nelle due variabili troverai sempre le ultime due parole (quindi, così com'è, questo ciclo è inutile) ...

Il secondo ciclo è indipendente dal prim (anche se tu l'hai scritto come se uno dipendesse dall'altro) e inizia quando termina il primo

codice:
 while(fgets(str2,MAXS,fpin)!=NULL  )
        sscanf(str2,"%s",nome);
e non fa altro che leggere tutto il file di input e mantenere nella variabile l'ultima parola (così com'è, anche questo ciclo è inutile) ...

A questo punto rimane, per ultimo, il codice

codice:
{
   if(strcmp(eng,nome)==0)
   {
          fprintf(fpout,"%s\n",eng);
   }
}
che viene eseguito indipendentemente dai cicli precedenti e una sola volta. Essendo eng e nome gli ultimi dati letti dai due cicli predenti, non verrà soddisfatta mai e mai verrà scritto sul file in output.

Devi rivedere tutto l'algoritmo che pensavi di adottare con quei cicli ... le correzioni non sono banali.