There are multiple differences. Two crucial ones are:
fgets()can read from any open file, butscanf()only reads standard input.fgets()reads ‘a line of text’ from a file;scanf()can be used for that but also handles conversions from string to built in numeric types.
Many people will use fgets() to read a line of data and then use sscanf() to dissect it.