- printf()
- Вывод символов
- Вывод чисел
- Отображение адреса
- Спецификатор преобразования %n
- Модификаторы формата
- Модификаторы минимальной ширины поля
- Модификаторы точности
- Выравнивание вывода
- Обработка данных других типов
- Модификатор * и #
- Урок 1. Часть 2: Инструкции языка Си printf, puts, putchar — вывод текста и других данных
- Функция puts в Си
- Функция putchar в Си
- Escape символы в Си или управление перемещением курсора
- Язык Си printf — функция вывода информации
- Арифметические операции в Си, оператор присваивания
- Ввод-вывод в Си
- Вывод информации
- Табличный вывод
- Ввод информации
- Форматированный ввод и вывод
- Форматированный вывод
- Форматированный ввод
- Непечатные символы
- Форматированный вывод. Функция printf
- Формат-строка.
- Еscape-последовательности
- Спецификаторы формата.
- Модификаторы формата.
- Практика
- Дополнительные материалы
- Видео
printf()
Вот прототип функции printf() :
Функция printf() возвращает число выведенных символов или отрицательное значение в случае ошибки.
В этом примере первому спецификатору преобразования ( %c ), соответствует символ ‘C’, а второму ( %s ), — строка «и к тому же очень сильно!».
Код | Формат |
---|---|
%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. Обратите внимание на то, каким образом звездочке (*) ставится в соответствие определенное значение
Урок 1. Часть 2: Инструкции языка Си printf, puts, putchar — вывод текста и других данных
Функция puts в Си
Функция puts в Си осуществляет вывод информации на экран. Параметром функции (параметр заключен в круглые скобки, именно он выводится на экран) могут быть данные одного из следующих типов:
begin writeln(‘Hello world!’); end.
var slovo: string; begin slovo:=’Hello world!’; writeln(slovo); end.
#define SLOVO «Hello world!» main()
const SLOVO=’Hello world!’; begin writeln(SLOVO); end.
Функция putchar в Си
Функция putchar в Си необходима для вывода единичного символа на экран. Параметром функции могут быть данные следующих типов:
В некоторых компиляторах при использовании функции putchar в Си необходимо подключить в код файл заголовков STDIO.H с помощью директивы #include. В подобных компиляторах функция putchar() является производной другой функции — putc(), которая осуществляет вывод на специальные устройства, такие как диск или принтер.
Пример подключения файла заголовка:
Escape символы в Си или управление перемещением курсора
\n – переход на новую строку :
После слова Ура! произойдет переход на начало следующей строки.
Отображает строку с цифрой 0 в крайней левой позиции экрана и цифры от 1 до 5 через табуляцию
\r – возврат каретки к началу той же строки :
puts («1\r2»); // произойдет затирание
\b – сдвиг курсора на одну позицию влево
\’ — отображает одинарную кавычку
\» — отображает двойную кавычку
\\ — отображает обратную косую черту
Язык Си printf — функция вывода информации
Языки Си и Си++ имеют более сложную и комплексную функцию для вывода информации, называемую printf(). Она позволяет выводить на экран данные любого типа и работать с несколькими аргументами.
Кроме того, функция Си printf() позволяет осуществлять так называемый форматированный вывод данных.
Самый обычный случай, когда функция printf() просто заменяет функцию puts() для вывода строки:
#define NOTE «Привет!» main()
Но целесообразней использовать функцию для осуществления форматированного вывода:
Программа выведет на экран «Mne ispolnilos 12 let».
Указатели формата:
%d целое число
%u беззнаковое целое число
%f вещественное число типа float или double
%e вещественное число в экспоненциальной форме
%c символ
%s строка
Арифметические операции в Си, оператор присваивания
+ сложение
– вычитание
* умножение
/ деление
% получение остатка от деления нацело
Оператор присваивания
= простое присваивание a=b
++ унарный инкремент a++ (или ++a)
— унарный декремент
+= a+=b если a=3, b=4, то a=7
–= a-=b
*= a*=b
/= a/=b
%= a%=b если a=10, b=3 то а=1
сhar item[] = «Винчестер»; float cost = 3000.50; float markup = 0.75;
Добавьте в программу функцию printf(), которая выводит на экран следующие сообщения:
Наименование товара: Жесткий диск Цена за 1 упаковку: 3000.50 Наценка: 0.75
Обратите внимание на выравнивание.
Ввод-вывод в Си
Основной задачей программирования является обработка информации, поэтому любой язык программирования имеет средства для ввода и вывода информации. В языке Си нет операторов ввода-вывода.
Вывод информации
Функция printf() предназначена для форматированного вывода. Она переводит данные в символьное представление и выводит полученные изображения символов на экран. При этом у программиста имеется возможность форматировать данные, то есть влиять на их представление
на экране.
Общая форма записи функции printf() :
СтрокаФорматов состоит из следующих элементов:
Объекты могут отсутствовать.
Управляющие символы не выводятся на экран, а управляют расположением выводимых символов. Отличительной чертой управляющего символа является наличие обратного слэша ‘\’ перед ним.
Основные управляющие символы:
Форматы нужны для того, чтобы указывать вид, в котором информация будет выведена на экран. Отличительной чертой формата является наличие символа процент ‘%’ перед ним:
Результат работы программы
Тот же самый код может быть представлен с использованием одного вызова printf :
Табличный вывод
При указании формата можно явным образом указать общее количество знакомест и количество знакомест, занимаемых дробной частью:
В приведенном примере 10 — общее количество знакомест, отводимое под значение переменной; 5 — количество позиций после разделителя целой и дробной части (после десятичной точки). В указанном примере количество знакомест в выводимом числе меньше 10, поэтому свободные знакоместа слева от числа заполняются пробелами. Такой способ форматирования часто используется для построения таблиц.
Ввод информации
Функция форматированного ввода данных с клавиатуры scanf() выполняет чтение данных, вводимых с клавиатуры, преобразует их во внутренний формат и передает вызывающей функции. При этом программист задает правила интерпретации входных данных с помощью спецификаций форматной строки.
Общая форма записи функции scanf( ) :
Строка форматов и список аргументов для функции обязательны.
Результат работы программы:
Функция scanf( ) является функцией незащищенного ввода, т.к. появилась она в ранних версиях языка Си. Поэтому чтобы разрешить работу данной функции в современных компиляторах необходимо в начало программы добавить строчку
Форматированный ввод и вывод
Форматированный вывод
Сегодня мы рассмотрим две важные функции форматированного ввода и вывода. Устройство и работу этих функций полностью можно понять только после изучения работы с указателями и функций с переменным числом параметров. Но пользоваться этими функциями необходимо уже сейчас, так что некоторые моменты придётся пропустить.
Функция проходит по строке и заменяет первое вхождение % на первый аргумент, второе вхождение % на второй аргумент и т.д. Далее мы будем просто рассматривать список флагов и примеры использования.
Общий синтаксис спецификатора формата
%[флаги][ширина][.точность][длина]спецификатор
Спецификатор – это самый важный компонент. Он определяет тип переменной и способ её вывода.
Спецификатор | Что хотим вывести | Пример |
---|---|---|
d или i | Целое со знаком в в десятичном виде | 392 |
u | Целое без знака в десятичном виде | 7235 |
o | Беззнаковое в восьмеричном виде | 657 |
x | Беззнаковое целое в шестнадцатеричном виде | 7fa |
X | Беззнаковое целое в шестнадцатеричном виде, верхний регистр | 7FA |
f или F | Число с плавающей точкой | 3.4563745 |
e | Экспоненциальная форма для числа с плавающей точкой | 3.1234e+3 |
E | Экспоненциальная форма для числа с плавающей точкой, верхний регистр | 3.1234E+3 |
g | Кратчайшее из представлений форматов f и e | 3.12 |
G | Кратчайшее из представлений форматов F и E | 3.12 |
a | Шестнадцатеричное представление числа с плавающей точкой | -0xc.90fep-2 |
A | Шестнадцатеричное представление числа с плавающей точкой, верхний регистр | -0xc.90FEP-2 |
c | Буква | a |
s | Строка (нуль-терминированный массив букв) | Hello World |
p | Адрес указателя | b8000000 |
n | Ничего не печатает. Аргументом должен быть указатель на signed int. По этому адресу будет сохранено количество букв, которое было выведено до встречи %n | |
% | Два идущих друг за другом процента выводят знак процента | % |
Суб-спецификатор длины изменяет длину типа. В случае, если длина не совпадает с типом, по возможности происходит преобразование до нужного типа.
спецификаторы | |||||||
---|---|---|---|---|---|---|---|
Длина | d, i | u o x X | f F e E g G a A | c | s | p | n |
(none) | int | unsigned int | double | int | char* | void* | int* |
hh | signed char | unsigned char | signed char* | ||||
h | short int | unsigned short int | short int* | ||||
l | long int | unsigned long int | wint_t | wchar_t* | long int* | ||
ll | long long int | unsigned long long int | long long int* | ||||
j | intmax_t | uintmax_t | intmax_t* | ||||
z | size_t | size_t | size_t* | ||||
t | ptrdiff_t | ptrdiff_t | ptrdiff_t* | ||||
L | long double |
Форматированный ввод
Как и в printf, ширина, заданная символом * ожидает аргумента, который будт задавать ширину. Флаг длина совпадает с таким флагом функции printf.
Кроме функций scanf и printf есть ещё ряд функций, которые позволяют получать вводимые данные
Это не полный набор различных функций символьного ввода и вывода. Таких функций море, но очень многие из них небезопасны, поэтому перед использованием внимательно читайте документацию.
Непечатные символы
В си определён ряд символов, которые не выводятся на печать, но позволяют производить форматирование вывода. Эти символы можно задавать в виде численных значений, либо в виде эскейп-последовательностей: символа, экранированного обратным слешем.
Форматированный вывод. Функция printf
Пожалуйста, приостановите работу AdBlock на этом сайте.
Общий синтаксис функции printf следующий:
Рис.1. Общий синтаксис функции printf.
Напоминаю, что параметрами называется то, что мы записываем рядом с именем функции в круглых скобках.
Кроме обязательной строки форматирования есть и необязательные параметры. Они пишутся через запятую после формат-строки.
Формат-строка.
Еscape-последовательности
Часто используемые escape-последовательности:
Как видите, последние четыре последовательности нужны лишь для того, чтобы вывести на экран символы «»», «’», «\» и «?». Дело в том, что если эти символы просто записать в формат-строку, то они не отобразятся на экране, а в некоторых случаях программа и вовсе не скомпилируется.
Следующая программа иллюстрирует работу escape-последовательностей.
Хотя escape-последовательности состоят из нескольких символов, но в потоке вывода они воспринимаются как цельный символ, который имеет своё собственное значение.
Итого, используя управляющие последовательности мы можем влиять на то, как данные будут выводиться на экране.
Спецификаторы формата.
Для каждого типа данных есть свой спецификатор формата. Ниже записаны основные из них.
Основные спецификаторы формата:
Есть и другие спецификаторы формата. Мы познакомимся с ними тогда, когда они нам понадобятся.
Сами спецификаторы формата на экран не выводятся. Вместо них выводятся данные, которые передаются в функцию printf после строки форматирования.
Функция printf работает следующим образом. Все символы, заключенные в двойные кавычки, кроме управляющих последовательностей и спецификаторов формата, выводятся на экран. Спецификаторы формата во время вывода заменяются на значения, указанные после формат-строки. Причем, если используется несколько спецификаторов формата, то первый спецификатор заменяется на первое значение, расположенное после формат строки, второй – на второе, и т.д.
Посмотрим на примерах.
Рис.2 Вывод Листинг 2.
Рис.3 Вывод Листинг 3.
Рис.4 Вывод Листинг 4.
Рис.5 Вывод Листинг 5.
Рис.6 Принцип работы функции printf.
По сути, формат строка задаёт некоторый трафарет(шаблон), в который подставляются данные для вывода, в том порядке, в котором они указаны.
Напишем небольшую программу, которая иллюстрирует использование спецификаторов формата.
Модификаторы формата.
Модификаторы формата записываются между символом % и буквой используемого типа. На рисунке ниже представлена спецификатор формата с использованием модификатора формата.
Рис.7 Модификатор формата
Первое число обозначает ширину поля, выделяемого для записи числа. Второе число обозначает точность, с которой мы хотим вывести данное вещественное число.
В примере на картинке под вещественное число мы выделяем 8 символов и хотим видеть 3 знака после запятой.
Если указанного в ширине количества позиций нам не хватает для вывода числа, то ширина поля увеличивается автоматически, до минимально-возможного количества позиций.
Для иллюстрации описанных возможностей модификаторов формата, напишем небольшую программу.
Результат работы данной программы представлен на рисунке ниже.
Рис.8 Вывод Листинг 8.
Я специально поставил вокруг каждого числа прямые черточки, что можно было увидеть, что означает ширина поля для вывода и как работает выравнивание по левому краю.
Да, чуть не забыл. Мы решили одну из задач, которая стояла перед нами в начале урока.
Практика
Решите предложенные задачи. Для удобства работы сразу переходите в полноэкранный режим
Исследовательские задачи для хакеров:
Дополнительные материалы
Видео
Ввод и вывод данных. Спецификаторы формата. Курс по программированию на Си и Си++. Урок 5Скачать
C++. Форматированный ввод и выводСкачать
ФОрматированный вывод в Си Д365 Rec 10 07 21Скачать
Программирование на Си урок 30: Функции ввода и вывода строк в языке СиСкачать