С С99 соответствие между спецификаторами формата и типами аргументов с плавающей запятой в C согласовано между printf
и scanf
. Это
%f
для float
%lf
для double
%Lf
для long double
Просто так получилось, что, когда аргументы типа float
передаются как переменным числом параметров, такие аргументы неявно преобразуются для ввода double
. Именно по этой причине в спецификаторах printf
формат %f
и %lf
эквивалентны и взаимозаменяемы. В printf
вы можете «перекрестно использовать» %lf
с float
или %f
с double
.
Но нет оснований на практике делать это на практике. Не используйте %f
аргументам printf
типа double
. Это широко распространенная привычка, появившаяся в C89/90 раз, но это плохая привычка. Используйте %lf
в printf
для double
и сохраните %f
для float
аргументов.
Я не понимаю, что вы подразумеваете под POINTER здесь. В scanf мы передаем только адрес переменной (т.е.), где находится указатель – 2012-06-17 13:04:38
@deetchanya В C, когда вы «берете адрес» переменной с унарным оператором `&`, результатом этой операции является указатель на место хранения переменной в памяти. Это указатель, который передается `scanf`. – zwol 2013-06-27 23:03:03
это еще одно сообщение об этом https: // stackoverflow.com/questions/9291348/why-is-scanf-not-working-as-expected-when-writing-to-a-string-literal – vimalpt 2014-09-22 10:03:52