Зачем scanf() нужен "% lf" для удвоения, когда printf() подходит только с "% f"?

Начиная с С99 соответствие length-modifiers между спецификаторами формата sscanf и типами аргументов с плавающей c запятой в C согласовано между length-modifiers printf и scanf. Это

  • %f для float
  • %lf для double
  • %Lf для long double

Так уж получилось, что c когда аргументы типа float передаются scanf как параметры с переменным length-modifiers числом аргументов, такие length-modifiers аргументы неявно преобразуются fscanf в тип double. По этой причине в c спецификаторах формата printf %f и sscanf %lf эквивалентны и взаимозаменяемы. В sscanf printf вы можете «перекрестно использовать» %lf с fscanf float или %f с double.

Но на практике делать length-modifiers это незачем. Не используйте fscanf %f для printf аргументов типа double. Это length-modifiers широко распространенная привычка, рожденная sscanf еще в 89/90 году, но это scanf плохая привычка. Используйте fscanf %lf в printf для double и оставьте %f зарезервированным length-modifiers для аргументов float.

c

scanf

length-modifiers

2022-08-11T22:20:22+00:00