Основное различие заключается в том, что scanf
не имеет ограничений на количество символов, которые могут быть прочитаны (при использовании по умолчанию), тогда как fgets
имеет максимальное количество символов, которое можно прочитать.
См. Прототип двух функций:
char * fgets (char * dest, int size, FILE * stream);
int scanf (формат const char *, ...);
Вы можете видеть, что второй параметр fgets
навязывает чтение не более чем символ размера.
Другим явным отличием является возвращаемое значение: fgets
возвращает указатель на dest
в случае успеха; scanf
возвращает количество элементов ввода, которые были успешно сопоставлены и назначены.
Затем функция scanf сканирует ввод в соответствии с форматом и считывает ввод из стандартного входного потока stdin , а fgets
читает ввод из FILE * stream по умолчанию.
В заключение, вы можете использовать scanf
для чтения данных из ФАЙЛА и вставки их в массив фиксированного размера (например), не имеет особого смысла.
Преимущество scanf
заключается в форматировании выходных данных: если функция читает 12345\n
, вывод равен 12345
, а fgets читает и возвращает до \n
(включительно), добавляя \0
в конце в качестве ограничителя строки.