Форматный ввод и вывод данных




Форматированный ввод и вывод на консоль осуществляют функции printf () и scanf (). Форматированный ввод и вывод означает, что функции могут читать и выводить данные в разном формате, которым можно управлять. Эти функции имеют прототипы в файле STDIO.H

 

Функция printf () имеет следующий синтаксис:

 

printf (“управляющая_строка” [, список аргументов]);

 

Управляющая строка содержит два типа информации: символы, которые непосредственно выводятся на экран, и команды формата (спецификаторы формата), определяющие, как выводить аргументы. Команда формата начинается с символа %, за которым следует код формата. Команды формата следующие:

%с - символ,

%d - целое десятичное число,

%i - целое десятичное число,

%е - десятичное число в виде х.хх е+хх,

%Е - десятичное число в видех.хх Е+хх,

%f - десятичное число с плавающей занятой хх.хххх,

%F - десятичное число с плавающей запятойхх.хххх,

%g - %f или %е, что короче,

%G - %Fили %Е, что короче,

%о - восьмеричное число,

%s - строка символов,

%u - беззнаковое десятичное число,

%х - шестнадцатеричное число 5a5f,

%Х - шестнадцатеричное число 5A7F,

%% - символ %,

%р - указатель,

%n - указатель.

 

Кроме того, к командам формата могут быть применены модификаторы l и h, например:

%ld - печать long int,

%hu - печать short unsigned,

%Lf - печать long double.

 

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

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

Вывод

 

printf("%05d", 15);

 

даст результат 00015.

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

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

 

Основная функция ввода с консоли - scanf(). Она предназначена для ввода данных любого встроенного типа и автоматически преобразует вве­денное число в заданный формат. Синтаксис функции имеет вид

 

scanf (“управляющая_строка”, список аргументов);

 

Управляющая строка содержит три вида символов: спецификаторы формата, пробелы и другие символы. Команды или спецификаторы фор­мата начинаются с символа %. Они перечислены ниже:

%с - чтение символа,

%d - чтение десятичного целого,

%i - чтение десятичного целого,

%е - чтение числа типа float,

%h - чтение short int.

%о - чтение восьмеричного числа,

%s - чтение строки.

%х - чтение шестнадцатеричного числа,

%р - чтение указателя,

%n - чтение указателя в увеличенном формате.

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

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

Разделителями между двумя вводимыми числами являются символы пробела, табуляции или новой строки. Знак * после % и перед кодом формата дает команду прочитать данные указанного типа, но не присваивать это значение. Так,

 

scanf("%d%*c%d", &i, &j);

 

при вводе 50+20 присвоит переменной i значение 50, переменной j - значение 20, а символ + будет прочитан и проигнорирован.

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

scanf("%5s", str);

 

указывает на необходимость прочитать из потока ввода первые 5 символов. При вводе 123456789 массив str будет содержать только 12345, остальные символы будут проигнорированы. Разделители: пробел, символ табуляции и символ новой строки - при вводе символа воспринимаются, как и все другие символы.

Если в управляющей строке встречаются какие-либо другие символы, то они предназначаются для того, чтобы определить и пропустить соответствующий символ. Поток символов 5plusl0 оператором

 

scanf("%dplus%d", &i, &j);

 

присвоит переменной i значение 5, переменной j - значение 10, а символы plus пропустит, так как они встретились в управляющей строке. К недостаткам, правда преодолимым, функции scanf() относится невозможность выдачи приглашения к вводу, т. е. приглашение должно быть выдано до обращения к функции scanf().

Одной из мощных особенностей функции scanf() является возможность задания множества поиска (scanset). Множество поиска определяет набор символов, с которыми будут сравниваться читаемые функцией scanf() сим­волы. Функция scanf() читает символы до тех пор, пока они встречаются в множестве поиска. Как только символ, который введен, не встретился в множестве поиска, функция scanf() переходит к следующему спецификатору формата. Множество поиска определяется списком символов, заклю­ченных в квадратные скобки. Перед открывающей скобкой ставится знак %. Чтобы увидеть, как используется эта возможность, рассмотрим пример.

 

Управляющие символы

В языке С есть символьные константы, которые не соответствуют никакому из печатных символов. Так, в коде ASCII символы с номерами от нуля до 31 являются управляющими символами, которые нельзя ввести с клавиатуры. Для использования таких символов в языке С вводятся так называемые управляющие константы (backslash charchter constans).

Управляющие символы представлены в следующей табл 2.3.

Таблица 2.3

Управляющий символ Значение
\b BS, забой
\f Новая страница, перевод страницы
\n Новая строка, перевод строки
\r Возврат каретки
\t Горизонтальная табуляция
\v Вертикальная табуляция
\" Двойная кавычка
\’ Апостроф
\\ Обратная косая черта
\0 Нулевой символ, нулевой байт
\a Сигнал
\N Восьмеричная константа
\xN Шестнадцатеричная константа
\? Знак вопроса

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2020-12-08 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: