Зачем 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
Зачем scanf() нужен "% lf" для удвоения, когда printf() подходит только с "% f"?
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.