Что возвращает printf в си

printf

Функция printf() записывает в stdout аргументы из списка arg-list под управлением строки, на которую указывает аргумент format.

Строка, на которую указывает format, состоит из объектов двух различных назначений. Во- первых, это символы, которые сами должны быть выведены на экран. Во-вторых, это специфика­торы формата, определяющие вид, в котором будут выведены аргументы из списка arg-list. Спе­цификаторы формата состоят из символа процент, за которым следует код формата. Команды форматирования приведены в таблице. Количество аргументов должно точно соответство­вать количеству спецификаторов формата, причем следовать они должны в одинаковом порядке. Например, следующий вызов функции printf()

printf («Hi %с %d %s», ‘с’, 10, «there!»);

приведет к выводу «Hi с 10 there!».

Таблица: Команды форматирования для printf()

КодФормат
Символ типа char
%dДесятичное число целого типа со знаком
%iДесятичное число целого типа со знаком
Научная нотация (е нижнего регистра)
Научная нотация (Е верхнего регистра)
%fДесятичное число с плавающей точкой
%gИспользует код %е или %f — тот из них, который короче (при использовании %g используется е нижнего регистра)
%GИспользует код %Е или %f — тот из них, который короче (при использовании %G используется Е верхнего регистра)
Восьмеричное целое число без знака
%sСтрока символов
%uДесятичное число целого типа без знака
Шестнадцатиричное целое число без знака (буквы нижнего регистра)
Шестнадцатиричное целое число без знака (буквы верхнего регистра)
Выводит на экран значение указателя
%nАссоциированный аргумент — это указатель на переменную целого типа, в которую помещено количество символов, записанных на данный момент
%%Выводит символ %

Если количество аргументов меньше, чем количество команд форматирования, то вывод не­определен. Если же количество аргументов больше, чем команд форматирования, то лишние ар­гументы отбрасываются.

Функция printf() возвращает количество действительно выведенных символов. Возврат отрица­тельной величины означает ошибку.

Команды форматирования могут содержать модификаторы, означающие ширину поля, точ­ность и флаг выравнивания влево. Переменная целого типа, помещенная между символом про­цент и командой форматирования, работает как спецификатор минимальной ширины поля, запол­няя поле вывода пробелами или нулями так, чтобы обеспечить указанную минимальную ширину. Если строка или число больше, чем этот минимум, они будут полностью выведены. По умолча­нию заполнение производится пробелами. При выводе числовых переменных, если надо исполь­зовать заполнение нулями, помещается нуль перед спецификатором минимальной ширины поля. Например, %05d будет дополнять числа, состоящие из менее чем 5 цифр, нулями до пяти цифр.

Результат использования модификатора точности зависит от типа модифицируемой команды форматирования. Чтобы использовать модификатор точности, надо поместить десятичную точку и точность вслед за ней после количества выводимых десятичных знаков. Например, %10.4f озна­чает вывод числа шириной минимум 10 символов с четырьмя знаками после точки. Однако при использовании совместно со спецификаторами g или G модификатор точности задает максималь­ное количество отображаемых значащих цифр.

Когда модификатор точности применяется к целым числам, он указывает минимальное коли­чество отображаемых цифр. (При необходимости отображаются предшествующие нули.)

Когда модификатор точности применяется к строкам, число после десятичной точки указывает максимальную длину поля. Например, %5.7s выводит строку длиной не менее пяти и не более семи символов. Если строка длиннее, чем максимальная ширина поля, то последние символы будут урезаны.

По умолчанию вывод производится с выравниванием вправо. Это значит, что если ширина поля больше, чем выводимые данные, то данные будут размещены на правом краю поля. Можно задать режим выравнивания влево, вставив знак минус сразу после знака процент. Например, %-10.2f прижмет влево в десятизнаковом поле число с плавающей точкой с двумя знаками после запятой.

Имеется два спецификатора формата, позволяющих printf() отображать целые числа типа short и long. Эти спецификаторы могут применяться совместно со спецификаторами типа d, i, о, u, х и X. Спецификатор l «говорит» printf() о том, что далее следуют данные типа long. Например, %ld означает, что нужно вывести long int. Спецификатор h указывает printf(), что нужно отобразить short int. Следовательно, %hu указывает, что данные имеют тип short unsigned int.

Хоть это и не оговорено в стандарте (да это и не нужно), модификатор l может также предше­ствовать спецификаторам типа с плавающей точкой е, Е, f, g и G, указывая, что далее следует переменная double. L используется для указания long double.

Спецификатор n помещает количество выведенных до сих пор символов в переменную целого типа, на которую указывает аргумент, соответствующий спецификатору. Например, следующий фрагмент кода выводит число 15 после строки «this is a test».

int i;
printf («this is a test %n», &i);
printf(«%d», i);

Символ # имеет особое значение, когда используется с некоторыми спецификаторами формата функции printf(). Если поставить # перед спецификаторами a, g, G, f, е или Е, то десятичная точка будет ставиться даже в отсутствие цифр после запятой. Если поставить # перед специфика­тором формата х, то шестнадцатиричное число будет выведено с префиксом 0х. Использование # со спецификатором о приводит к выводу префикса 0. С другими спецификаторами формата сим­вол # использоваться не может.

Спецификаторы минимальной ширины поля и точности могут быть представлены для printf() не только в виде констант, но и с помощью аргументов. Это делается с помощью символа *, который служит указателем места. При считывании форматной строки функция printf() проводит соответствие между символами * и аргументами в том порядке, в каком они встречаются.

Источник

Описание функций языка Си

All | _ | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z

printf – вывод форматированной строки в стандартный поток вывода.

format – указатель на строку c описанием формата.

При успешном завершении вывода возвращается количество выведенных символов.
При шибке возвращается отрицательное число.

Функция printf выводит в стандартный поток вывода строку отформатированную в соответствии с правилами, указанными в строке, на которую указывает аргумент format.

Правила задаются набором трех типов директив:
1. Обычные символы (кроме ‘%’ и ‘\’), которые выводятся без изменения;
2. Спецификаторы формата;
3. Специальные сиволы.

Каждый спецификатор формата начинается с символа ‘%’ и имеет следующий формат:

Спецификатор формата может иметь 0 или более [флагов], которые могут принемать значенияуказанные в таблице 1.

Спецификатор [флаги] можно не указывать.

Спецификатор [ширина] задаёт минимальный размер выводимого числа в символах. Если количество символов в выводимом числе меньше указанной минимальной ширины, то недостоющее количество символов заполняется нулями или пробелами слева или справа в зависимости от указанных флагов. Ширина указывается либо целым числом, либо символом * с последующим указанием имени переменной типа int, содержащей значение ширины, перед аргументом к которому он относится. Если аргумент имеет отрицательное значение, то он эквивалентен соответствующему положительному значению с флагом «-«.

Спецификатор [ширина] можно не указывать.

Действия спецификатора [точность] зависит от типа выводимого числа:

— Для типов d, i, o, u, x, X определяет минимальное число выводимых цифр. Если количество выводимых цифр в числе меньше, чем указано в спецификаторе [точность], то выводимое число будет дополнено нулями слева. Например, если при выводе числа 126 указать точность 4, то на экран будет выведено число 0126

— Для типов a, A, e, E, f, F определяет количество выводимых цифр после запятой. Если в выводимом числе количество значимых цифр после запятой меньше указанной точности, то недостающие символы выводятся нулями справа от числа. Если больше, то лишние цифры не выводятся. Например, если при выводе числа 126.345 указать точность 2, будет выведено на экран число 126.34, а если указать точность 5, то на экран будет выведено число 126.34500.

— Для типов g и G определяет максимальное выводимое число цифр. Например, если при выводе числа 126.345 указать точность 4, будет выведено на экран число 126.3. Если при выводе числа 1242679.23 указать точность 3, будет выведено на экран число 1.24е+06.

Точность указывается в виде символа точка, за которым следует десятичное число или символ «*», с последующим указанием имени переменной типа int, содержащей значение точности, перед аргументом к которому он относится.

Спецификатор [точность] можно не указывать.

Спецификатор [модификаторы] определяет размер выводимых данных (char, short, long, longlong). Спецификаторы используются для вывода чисел типа: char, short int, long int, long long int, long double или для явного преобразования выводимых данных. Например, если имеется переменная типа int, а необходимо вывести ее как short int. Доступные модификаторы приведены в таблице 2.

Таблица 2.

МодификаторНазначение модификатора
hДля вывода числа типа short int или unsigned short int. Или для явного преобразования при выводе целочисленного числа к типу short int или unsigned short int. Используется совместно с типами преобразования:d, i, o, u, x и X, n.
hhДля вывода числа типа char или unsigned char. Или для явного преобразования при выводе целочисленного числа к типу char или unsigned char. Используется совместно с типами преобразования:d, i, o, u, x и X, n.
lДля вывода числа типа long int или unsigned long int. Или для явного преобразования при выводе целочисленного числа к типу long int или unsigned long int. Используется совместно с типами преобразования:d, i, o, u, x и X, n.
llДля вывода числа типа long long int или unsigned long long int. Или для явного преобразования при выводе целочисленного числа к типу long long int или unsigned long long int. Используется совместно с типами преобразования:d, i, o, u, x и X, n.
LДля вывода числа типа long double. Или для явного преобразования при выводе числа c плавающей точкой к типу long double. Используется совместно с типами преобразования:e, E, f, g и G.

Спецификатор [тип преобразования] определяет как надо итерпритировать и выводить число, например как знаковое целочисленное в десятичном виде, или беззнаковое целочисленное в шестнадцатеричном, или как число с плавающей точкой и так далее. Перечень доступных преобразований и их описание указано в таблице 3.

Для форматирования вывода в функции printf предусмотрен набор специальных симовлов. Перечень специальных символов приведен в таблице 4.

Источник

Синтаксис

Параметры

format
Формат объекта.

argument
Необязательные аргументы.

locale
Используемый языковой стандарт.

Возвращаемое значение

Комментарии

Функция wprintf — это версия printf с расширенными символами; format — строка расширенных символов. wprintf и printf ведут себя одинаково, если поток открыт в режиме ANSI. Функция printf на данный момент не поддерживает вывод данных в поток в кодировке Юникод.

Версии этих функций с суффиксом _l идентичны за исключением того, что они используют переданный параметр языкового стандарта вместо языкового стандарта текущего потока.

Аргумент format состоит из обычных символов, escape-последовательностей и (если за format следуют аргументы) спецификаций формата. Обычные символы и escape-последовательности копируются в stdout в порядке их отображения. Например, в строке

выводятся следующие выходные данные:

Спецификации формата всегда начинаются со знака процента ( ) и читаются слева направо. Когда функция printf обнаруживает первую спецификацию формата (если таковые имеются), она преобразует значение первого после format аргумента и выводит его соответствующим образом. Вторая спецификация формата вызывает преобразование второго аргумента и его вывод и т. д. Если число аргументов превышает количество спецификаций формата, лишние аргументы игнорируются. Если число аргументов меньше количества спецификаций формата, результаты будут не определены.

Убедитесь, что format не является строкой, определяемой пользователем.

Универсальное текстовое сопоставление функций

Tchar.h ассемблер_UNICODE и _MBCS не определено_MBCS определяется_UNICODE определяется
_tprintf printf printf wprintf
_tprintf_l _printf_l _printf_l _wprintf_l

Требования

Источник

Функция printf и форматы вывода

Что возвращает printf в си. ajax loader. Что возвращает printf в си фото. Что возвращает printf в си-ajax loader. картинка Что возвращает printf в си. картинка ajax loader. Функция printf() записывает в stdout аргументы из списка arg-list под управлением строки, на которую указывает аргумент format.

Функция printf() записывает в поток stdout свои аргументы в соответствии с форматной строкой format.

Строка format может содержать элементы двух видов. К первому относятся симво­лы, подлежащие выводу на экран. Ко второму виду — спецификаторы формата, опре­деляющие способ представления аргументов на экране. Спецификаторы формата на­чинаются со знака процента, за которым следует код формата. Количество аргументов должно точно совпадать с количеством спецификаторов формата, причем их порядок следования должен быть одинаковым. Например, следующий вызов функции printf() выведет на экран строку “Привет f 10 всем!”.

printf(“Привет %с %d %s”,’f, 10, “всем!”);

Если количество аргументов функции printf() меньше количества спецификато­ров формата, вывод будет неопределенным. Если число аргументов больше числа спе­цификаторов формата, лишние аргументы игнорируются.

Спецификаторы формата перечислены в таблице

Таблица Спецификаторы формата функции printf()
КодФормат
%cСимвол
%dДесятичное целое число со знаком
%iДесятичное целое число со знаком
%eНаучный формат (строчная буква е)
Научный формат (прописная буква Е)
%fДесятичное число с плавающей точкой
%gВ зависимости от того, какой формат короче, применяется либо %e, либо %f
%GВ зависимости от того, какой формат короче, применяется либо %E, либо %f
%oВосьмеричное число без знака
%sСтрока символов
%uДесятичное целое число без знака
%xШестнадцатеричное число без знака (строчные буквы)
%XШестнадцатеричное число без знака (прописные буквы)
Указатель
%nУказатель на целочисленную переменную. Спецификатор вызывает присвоение этой це-
лочисленной переменной количества символов, выведенных перед ним
%%Знак %

Функция printf()возвращает количество фактически напечатанных символов. Отрицательное число означает ошибку.

Коды формата могут иметь модификаторы, задающие ширину поля, точность и признак выравнивания по левому краю. Целое число, указанное между знаком про­цента % и кодом формата, действует как спецификатор минимальной ширины поля. Он заполняет поле вывода пробелами или нулями, обеспечивая ее минимальную ширину. Если строка или число больше минимальной ширины поля, они все равно выводятся полностью. По умолчанию в качестве заполнителя используется пробел. Если пус­тующее поле вывода необходимо заполнить нулями, перед спецификатором ширины поля следует поставить символ 0. Например, спецификатор %05d заполнит нулями пустующие позиции поля вывода, если количество цифр в целом числе, подлежащем выводу, будет меньше пяти.

Точный смысл модификатора точности зависит от кода модифицируемого формата. чтобы добавить модификатор точности, после спецификатора ширины поля необходимо поставить десятичную точку и указать точность. Для форматов e, E и f модификатор точности означает количество цифр после десятичной точки. Например, форматный код %10.4f выведет на экран число, у которого количество цифр не превышает 10, четыре из которых размещаются после десятичной точки. Если модификатор применяется к спецификаторам формата %g или %G, он задает количество значащих цифр.

Если модификатор точности применяется к целым типам, он задает минимальное количество цифр, из которых должно состоять число. Если число состоит из мень­шего количества цифр, оно дополняется ведущими нулями.

Если модификатор используется для вывода строк, он задает максимальную длину поля. Например, спецификатор %5.7s означает, что на экран будет выведена строка, состоящая как минимум из пяти символов, длина которой не превышает семи. Если строка окажется длиннее, последние символы будут отброшены.

По умолчанию вывод выравнивается по правому краю. Иначе говоря, если ширина поля больше, чем выводимые данные, результаты прижимаются к правому краю. Вы­вод можно выровнять по левому краю, поставив перед символом % знак “минус”. На­пример, спецификатор %-10.2f выравнивает число с двумя знаками после точки по левому краю поля, состоящего из 10 позиций.

Для вывода значений переменных типа short int и long int функция printf() ис­пользует два модификатора, которые можно применять к спецификаторам d, i, о, u и х. Модификатор l (буква “эль”) позволяет выводить значения типа long int. Например, спецификатор %ld означает, что на экран будет выведено значение типа long int. Для вывода значения типа short int используется модификатор h. Например, спецификатор %hu означает, что на экран будет выведено значение типа short unsigned int.

Начиная с 1995 года компиляторы поддерживают работу с расширенными симво­лами. Для этого к спецификатору с применяется модификатор l. В этом случае он за­дает расширенный символ. Аналогично, если модификатор l стоит перед специфика­тором s, на экран выводится строка расширенных символов.

Модификатор l можно использовать как префикс перед спецификаторами e, f и g. Он означает, что на экран выводится значение типа long double.

Спецификатор формата %n отличается от всех остальных. Он заставляет функцию printf() записывать в соответствующую переменную количество символов, уже вы­веденных на экран. Спецификатору %n должен соответствовать целочисленный указа­тель. После завершения функции printf() этот указатель будет ссылаться на пере­менную, в которой содержится количество символов, выведенных до спецификатора %n.

Эта программа выведет на экран строку “Это проверка” и число 3.

Функция printf() имеет еще два модификатора: * и #.

Модификатор #, стоящий перед спецификаторами g, G, f, E или e, гарантирует, что число будет содержать десятичную точку, даже если оно не имеет дробной части. Если этот модификатор стоит перед спецификаторами x или X, шестнадцатеричные числа выводятся с префиксом 0x. Если же символ # будет указан перед спецификатором o, число будет дополнено ведущими нулями. К другим спецификаторам модификатор # применять нельзя.

Ширину поля и точность представления числа можно задавать не только константами, но и переменными. Для этого вместо точных значений в спецификаторе следует указать символ *. При сканировании строки вывода функция printf() поочередно сопоставляет модификатор * с каждым аргументом.

Copyright 2021. All rights reserved.

Источник

Синтаксис спецификации формата: printf и wprintf функции

Различные функции printf и wprintf принимают строку формата и необязательные аргументы и создают форматированную последовательность символов для выходных данных. Строка формата не содержит ни одной или содержит несколько директив, которые являются либо литеральными символами для выходных данных, либо закодированными спецификациями преобразования, описывающими способ форматирования аргумента в выходных данных. Эта статья описывает синтаксис для кодирования спецификаций преобразования в строке формата. Список этих функций см. в разделе Потоковый ввод-вывод.

Спецификация преобразования состоит из необязательных и обязательных полей, имеющих следующий вид:

Каждое поле спецификации преобразования — это символ или число, указывающее конкретный параметр формата или описатель преобразования. Обязательное поле type определяет тип преобразования, которое применяется к аргументу. Необязательные поля flags, width и precision управляют дополнительными аспектами формата, такими как начальные пробелы или нули, выравнивание и отображаемая точность. Поле size указывает размер использованного и преобразованного аргумента.

printf( user_name ); /* Danger! If user_name contains «%s», program will crash */

Вместо этого используйте следующий код:

printf( «%s», user_name );

в Visual Studio 2015 printf функция и scanf семейство функций были объявлены как inline и перемещены в заголовки и. При переносе старого кода вы можете увидеть ошибку LNK2019 в подключении к этим функциям. Дополнительные сведения см. в статье Visual C++ журнал изменений 2003-2015.

Спецификатор преобразования типов

Символ спецификации преобразования type определяет, как должен интерпретироваться соответствующий аргумент: как символ, строка, указатель, целое число или число с плавающей запятой. Символ type — единственное обязательное поле спецификации преобразования; он указывается после всех необязательных полей.

Зависит от корпорации Майкрософт:
Z Символ типа, а также поведение c C s символов типа,, и, S если они используются с printf wprintf функциями и, являются расширениями Майкрософт. Стандарт ISO C использует c и s согласованно для узких символов и строк, а C также S для расширенных символов и строк во всех функциях форматирования.

Символы поля типа

ЗначениеВыходные данные
infinityinf
Несигнальное значение NaNnan
Сигнальное значение NaNnan(snan)
Неопределенное значение NaNnan(ind)

До выхода Visual Studio 2015 в среде CRT использовался другой нестандартный формат для выходных данных значений бесконечности, неопределенных значений и значений NaN.

Любое из них могло быть предваряться знаком и может быть отформатировано по-разному в зависимости от ширины и точности поля, иногда с ненеобычными эффектами. Например, printf(«%.2f\n», INFINITY) печатается, 1.#J так как printf(«%.2f\n», INFINITY) будет «округляться» до двух цифр точности.

Во всех экспоненциальных форматах минимальное отображаемое количество цифр показателя степени по умолчанию равно двум (три используются только при необходимости). с помощью _set_output_format функции можно задать число цифр, отображаемых в трех, для обеспечения обратной совместимости с кодом, написанным для Visual Studio 2013 и более.

Директивы флагов

Первое необязательное поле в спецификации преобразования содержит директивы флагов, ни одного или несколько символов флага, указывающих выравнивание выходных данных и управляющих выводом символов, пустых значений, начальных нулей, десятичных запятых и восьмеричных и шестнадцатеричных префиксов. В спецификации преобразования может быть указано несколько директив флагов, и символы флагов могут размещаться в любом порядке.

Символы флагов

Спецификация ширины

Спецификация ширины никогда не вызывает усечения значения. Если число символов в выходном значении больше указанной ширины или width значение не указано, все символы значения будут выводиться в соответствии со спецификацией точности.

Если в качестве спецификации ширины указана звездочка ( * ), значение ширины задается аргументом int из списка аргументов. width Аргумент должен предшествовать значению, которое отформатировано в списке аргументов, как показано в следующем примере:

printf(«%0*d», 5, 3); /* 00003 is output */

Отсутствующее или маленькое width значение в спецификации преобразования не приводит к усечению выходного значения. Если результат преобразования шире width значения, поле расширяется и содержит результат преобразования.

Спецификация точности

В отличие от спецификации ширины, спецификация точности может вызывать либо усечение выходного значения, либо округление значения с плавающей запятой. Если параметр precision имеет значение 0, а преобразуемые данные равны 0, результат не будет содержать символы, как показано в следующем примере:

printf( «%.0d», 0 ); /* No characters output */

Если спецификация точности представляет собой звездочку ( * ), аргумент int из списка аргументов предоставляет значение. В списке аргументов аргумент precision должен предшествовать форматируемому значению, как показано в следующем примере:

printf( «%.*f», 3, 3.14159265 ); /* 3.142 output */

Влияние значений точности на тип

Спецификация размера аргумента

Некоторые типы имеют разный размер в 32-разрядном и 64-разрядном коде. Например, size_t на 32 бита длиннее в коде, скомпилированном для x86, и на 64 бита длиннее в коде, скомпилированном для x64. Чтобы создать код форматирования для типов с переменным количеством байт, не зависящий от платформы, можно использовать модификатор размера аргумента с переменным количеством байт. Вместо этого используйте 64-разрядный модификатор размера аргумента и явно додвигайте тип аргумента переменной ширины в 64 бит. I Модификатор размера аргумента, зависящий от Майкрософт (в верхнем регистре), обрабатывает целочисленные аргументы переменной ширины, но j t z для переносимости рекомендуется использовать модификаторы для конкретного типа, и.

Префиксы размера для описателей формата функций printf и wprintf

hc hC Описатель типа или является синонимом c в printf функциях и C в wprintf функциях. lc lC wc Описатель типа,, или wC является синонимом C в printf функциях и c в wprintf функциях. hs hS Описатель типа или является синонимом s в printf функциях и S в wprintf функциях. ls lS ws Описатель типа,, или wS является синонимом S в printf функциях и s в wprintf функциях.

Зависит от корпорации Майкрософт:
I I32 I64 Префиксы модификатора размера аргумента (прописные i),, и, и w являются расширениями Майкрософт и не совместимы с ISO C. h Префикс при использовании с данными типа char и l префикс (строчная L) при использовании с данными типа double — расширения Майкрософт.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *