@GiggiSk8 Il fatto che il prof. non la accetti mi sembra un pò strano, ma può essere che vi abbia spiegato l'uso della fscanf() e volesse controllare se avevate capito o no.
Rimane il fatto che se tu apri un qualsiasi progetto C/C++ professionale e ricerchi fscanf() o sua sorella scanf() non troverai niente, indipendentemente da quello che dice il prof.
Non conosco molto la fgets() causa non averla quasi mai utilizzata, so che e' piu sicura e più facile da usare, dato che tu la usi posso chiederti come faresti, per esempio, con la fgets, a importare da file delle stringhe alcune composte interamente da lettere, altre da lettere piu altri caratteri e altre sono righe vuote e numeri, devi importare solamente le stringhe composte da lettere dell'alfabeto ed escludere le altre.
E' più sicura perchè legge al massimo il numero di caratteri specificato, quindi non rischi buffer overflow.
Con la fgets() non fai nessuna di queste ricerche/analisi che elenchi, semplicemente ti leggi una riga da file (o da stdin): nell'idea di Unix (e quindi di un programmatore C) c'è la semplicità di fare piccoli programmi/funzioni che eseguono operazioni semplici e questo dovrebbe bastare a dire NO alla (f)scanf().
Pertanto, con fgets() leggi una riga da file e la tieni in un buffer es.:
char buffer[80];
poi sulla stringa ci fai quello che vuoi, ad esempio usi strchr() per trovare le posizioni delle virgole; con le posizioni puoi estrarre le sottostringhe.
Puoi scrivere una funzione che data la riga ne analizza il contenuto carattere per carattere e quindi dire se ci sono solo cifre, solo alfabetici oppure un mix... ti devi costruire dei piccoli mattoncini che poi usi!