Для чего нужен printf в c

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() проводит соответствие между символами * и аргументами в том порядке, в каком они встречаются.

Источник

Синтаксис

Параметры

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() :

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

В этом примере первому спецификатору преобразования ( %c ), соответствует символ ‘C’, а второму ( %s ), — строка «и к тому же очень сильно!».

Таблица 8.2. Спецификаторы преобразования для функции printf()
КодФормат
%aШестнадцатеричное в виде 0xh.hhhhp+d (только С99)
%AШестнадцатеричное в виде 0Xh.hhhhP+d (только С99)
%cСимвол
%dДесятичное целое со знаком
%iДесятичное целое со знаком
%eЭкспоненциальное представление (‘е’ на нижнем регистре)
%EЭкспоненциальное представление (‘Е’ на верхнем регистре)
%fДесятичное с плавающей точкой
%gВ зависимости от того, какой вывод будет короче, используется %е или %f
%GВ зависимости от того, какой вывод будет короче, используется %Е или %F
%oВосьмеричное без знака
%sСтрока символов
%uДесятичное целое без знака
%xШестнадцатеричное без знака (буквы на нижнем регистре)
%XШестнадцатеричное без знака (буквы на верхнем регистре)
%pВыводит указатель
%nАргумент, соответствующий этому спецификатору, должен быть указателем на целочисленную переменную. Спецификатор позволяет сохранить в этой переменной количество записанных символов (записанных до того места, в котором находится код %n )
%%Выводит знак %

Вывод символов


Вывод чисел

Спецификаторы преобразования %e и %E в функции printf() позволяют отображать аргумент типа double в экспоненциальном формате. В общем виде числа в таком формате выглядят следующим образом:

Применение спецификатора преобразования %g показано в следующей программе:

В результате выполнения получится следующее:

Вот что вывела эта программа:

Отображение адреса


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


Модификаторы формата


Модификаторы минимальной ширины поля

Вот что выводится при выполнении этой программы:

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

Модификаторы точности

Модификатор точности следует за модификатором минимальной ширины поля (если таковой имеется). Он состоит из точки и расположенного за ней целого числа. Значение этого модификатора зависит от типа данных, к которым его применяют.

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

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

В следующей программе показано, как можно использовать модификатор точности:

Вот что выводится при выполнении этой программы:

Выравнивание вывода

В следующей программе показано, как применяется выравнивание по левому краю:

И вот что получилось:

Обработка данных других типов

На заметкуВ составе С99 имеются некоторые дополнительные модификаторы типа для функции printf() ; о них рассказывается в части II.

Модификатор * и #

В следующей программе показано применение обоих модификаторов # и * :

Рис. 8.1. Обратите внимание на то, каким образом звездочке (*) ставится в соответствие определенное значение

Источник

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

Пожалуйста, приостановите работу AdBlock на этом сайте.

Общий синтаксис функции printf следующий:

Для чего нужен printf в c. Смотреть фото Для чего нужен printf в c. Смотреть картинку Для чего нужен printf в c. Картинка про Для чего нужен printf в c. Фото Для чего нужен printf в c

Рис.1. Общий синтаксис функции printf.

Напоминаю, что параметрами называется то, что мы записываем рядом с именем функции в круглых скобках.

Кроме обязательной строки форматирования есть и необязательные параметры. Они пишутся через запятую после формат-строки.

Формат-строка.

Еscape-последовательности

Часто используемые escape-последовательности:

Как видите, последние четыре последовательности нужны лишь для того, чтобы вывести на экран символы «»», «’», «\» и «?». Дело в том, что если эти символы просто записать в формат-строку, то они не отобразятся на экране, а в некоторых случаях программа и вовсе не скомпилируется.

Следующая программа иллюстрирует работу escape-последовательностей.

Хотя escape-последовательности состоят из нескольких символов, но в потоке вывода они воспринимаются как цельный символ, который имеет своё собственное значение.

Итого, используя управляющие последовательности мы можем влиять на то, как данные будут выводиться на экране.

Спецификаторы формата.

Для каждого типа данных есть свой спецификатор формата. Ниже записаны основные из них.

Основные спецификаторы формата:

Есть и другие спецификаторы формата. Мы познакомимся с ними тогда, когда они нам понадобятся.

Сами спецификаторы формата на экран не выводятся. Вместо них выводятся данные, которые передаются в функцию printf после строки форматирования.

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

Посмотрим на примерах.

Для чего нужен printf в c. Смотреть фото Для чего нужен printf в c. Смотреть картинку Для чего нужен printf в c. Картинка про Для чего нужен printf в c. Фото Для чего нужен printf в c

Рис.2 Вывод Листинг 2.

Для чего нужен printf в c. Смотреть фото Для чего нужен printf в c. Смотреть картинку Для чего нужен printf в c. Картинка про Для чего нужен printf в c. Фото Для чего нужен printf в c

Рис.3 Вывод Листинг 3.

Для чего нужен printf в c. Смотреть фото Для чего нужен printf в c. Смотреть картинку Для чего нужен printf в c. Картинка про Для чего нужен printf в c. Фото Для чего нужен printf в c

Рис.4 Вывод Листинг 4.

Для чего нужен printf в c. Смотреть фото Для чего нужен printf в c. Смотреть картинку Для чего нужен printf в c. Картинка про Для чего нужен printf в c. Фото Для чего нужен printf в c

Рис.5 Вывод Листинг 5.

Для чего нужен printf в c. Смотреть фото Для чего нужен printf в c. Смотреть картинку Для чего нужен printf в c. Картинка про Для чего нужен printf в c. Фото Для чего нужен printf в c

Рис.6 Принцип работы функции printf.

По сути, формат строка задаёт некоторый трафарет(шаблон), в который подставляются данные для вывода, в том порядке, в котором они указаны.

Напишем небольшую программу, которая иллюстрирует использование спецификаторов формата.

Модификаторы формата.

Модификаторы формата записываются между символом % и буквой используемого типа. На рисунке ниже представлена спецификатор формата с использованием модификатора формата.

Для чего нужен printf в c. Смотреть фото Для чего нужен printf в c. Смотреть картинку Для чего нужен printf в c. Картинка про Для чего нужен printf в c. Фото Для чего нужен printf в c

Рис.7 Модификатор формата

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

В примере на картинке под вещественное число мы выделяем 8 символов и хотим видеть 3 знака после запятой.

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

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

Результат работы данной программы представлен на рисунке ниже.

Для чего нужен printf в c. Смотреть фото Для чего нужен printf в c. Смотреть картинку Для чего нужен printf в c. Картинка про Для чего нужен printf в c. Фото Для чего нужен printf в c

Рис.8 Вывод Листинг 8.

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

Да, чуть не забыл. Мы решили одну из задач, которая стояла перед нами в начале урока.

Практика

Решите предложенные задачи. Для удобства работы сразу переходите в полноэкранный режим Для чего нужен printf в c. Смотреть фото Для чего нужен printf в c. Смотреть картинку Для чего нужен printf в c. Картинка про Для чего нужен printf в c. Фото Для чего нужен printf в c

Исследовательские задачи для хакеров:

Дополнительные материалы

Оставить комментарий

Чтобы код красиво отображался на странице заключайте его в теги [code] здесь писать код [/code]

Комментарии

В степике компилятор настроен так, что всем неинициализированным переменным устанавливает значение 0.

На такое поведение надеяться не стоит. В общем случае в переменной будет не нуль, а непонятно что (мусор).

Размещу естественным путем (то есть вручную) на общетематических, форумах уникальные сообщения (посты) с ключевым словом и ссылкой на Ваш сайт. Размером от 200 знаков.
Даю 30 дней гарантии. Если в течение этого времени будет удалена какая либо ссылка, я её заменю.
Ссылки будут размещаться на проверенных форумах в наиболее подходящих разделах общетематических форумов.

Что дает такое размещение?
— Рост позиций вашего сайта в Google по ключевому слову.
— Вычные ссылки
— Дополнительные тематические источники трафика
— Разбавление ссылочной массы
— Тематический трафик на Ваш сайт

Заказав тариф «БИЗНЕС», Вы уже через месяц увидете результат.
Это может быть как повышения трафика, повышение позиций Вашего сайта в Google, увелечение продаж и так далее.

Заказать и ознакомиться с тарифами Вы сможете перейдя по ссылке: (Ссылка ведет на биржу kwork)

Для примера:
— Ссылки с 60 форумов Украина. Создание топиков. http://gg.gg/ukr_links2
— Ссылки с 60 форумов Франции. Создание топиков. http://gg.gg/french-links
— Ссылки с 60 форумов Германии. Создание топиков. http://gg.gg/germany-links

Обращайтесь по контактам: Telegram @eTraffik

I will post in a natural way (that is, manually) on general forums, unique messages (posts) with a keyword and a link to your site. Size from 200 characters.
I give a 30-day guarantee. If any link is removed during this time, I will replace it.
Links will be posted on verified forums in the most appropriate sections of general forums.

What does this placement give?
— Growth of positions

Источник

Синтаксис спецификации формата: 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 не будет опубликован. Обязательные поля помечены *