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

Задачи ввода/вывода в языке Си решают функции printf() и scanf().
Операторы вывода используются для вывода значений переменных и текста.
Тексты в Си записываются в кавычках. В языке Си отсутствует специальный тип для работы со строками. Вместо этого строки представляются как массив типа char. Элементы строки, хранясь в массиве, записываются в смежные ячейки памяти. В конце строки ставится отметка \0. Наличие этой отметки говорит о том, что строка должна иметь размер на единицу больший, чем количество символов. Объявляется строка указанием типа char и записью размера в [].
Пример:
char name[40];
Для работы со строками к программе необходимо подключить файл string.h.
Каждая из функций ввода/вывода использует управляющую строку и список аргументов. Управляющая строка записывается первой и заключается в кавычки. Управляющие строки и аргументы не перемешиваются. Управляющие строки прежде всего содержат указание на вывод значения того или иного типа. Их называют спецификаторами преобразования.

Спецификаторы Действия
%a, %A возвращают число с плавающей точкой и 16-е цифры
%c возвращает одиночный символ
%d, %i возвращают целое число в десятичной форме
%e, %E возвращают число с плавающей точкой в экспоненциальной форме
%f возвращает число с плавающей точкой в десятичной форме
%g использует спецификатор %f или %e в зависимости от значения (выбирается автоматически)
%o возвращает восьмеричное целое число без знака
%p вывод указателя в шестнадцатеричном формате
%s возвращает строку символов
%u возвращает десятичное целое число без знака
%x, %X возвращают шестнадцатеричное целое число без знака
%% вывод на печать символа %


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

Модификаторы Действия
цифра/цифры минимальная ширина поля вывода (количество экранных символов)
.цифра точность
h используется при целочисленных преобразованиях для кодирования значений short int и unsigned short int
hh используется при целочисленных преобразованиях для кодирования значений signed char и unsigned char
j используется при целочисленных преобразованиях для получения типов int_max_t и uint_max_t
l используется при целочисленных преобразованиях для получения типа long int и unsigned long int
ll используется при целочисленных преобразованиях для получения типа long long int и unsigned long long int
t используется с целью кодирования значений типа ptroliff_t, который является разностью двух указателей
z используется с целью кодирования значений size_t
L используется при преобразовании чисел с плавающей точкой типа long double
флаг + значения со знаком печатаются со знаком "+" или "-"
флаг - элемент выравнивается по левому краю
флаг пробел значение со знаком "+" печатается с пробелом, но без знака
флаг # для спецификаторов %o, %x, %X выводит не значащие нули. Для форм с плавающей точкой гарантировано печатается точка, даже если десятичных знаков нет
флаг   для числовых форм вместо пробелов на свободные экранные места выводятся нули


Ввод данных осуществляется с помощью функции scanf(). В языке Си существует несколько функций ввода. scanf() употребляется чаще других, т.к. ей присущ различный формат ввода. Также как и функция printf(), ввод использует управляющую строку, сопровождаемую списком аргументов. Управляющая строка указывает в какие форматы должен быть преобразован вводимый текст. В качестве параметров функция scanf() использует не сами переменные, а указатели на них. Для использования scanf()необходимо выполнять два правила:
1) если функция используется для считывания значений в переменную основного типа, то перед именем переменной ставится знак &.
2) если значение считывается в символьный массив, то символ & не ставится.
Преобразование одного вводимого данного осуществляется указанием спецификатора преобразования. Если данных вводится несколько, то они разделяются знаком пробела.

Спецификаторы Действия
%c интерпретирует результат ввода в качестве символа
%d интерпретирует результат ввода как десятичное целое число со знаком
%e, %f, %g, %a интерпретирует результат ввода как число с плавающей точкой
%E, %F, %G, %A интерпретирует результат ввода как число с плавающей точкой. Все вводимые символы преобразуются в заглавные
%o интерпретирует результат ввода как восьмеричное целое число со знаком
интерпретирует результат ввода как указатель
%s интерпретирует результат ввода как строку. Ввод начинается с первого символа, не являющегося служебным и включает все символы до следующего служебного
%u интерпретирует результат ввода как целое число без знака
%x, %X интерпретирует результат ввода как шестнадцатеричное целое число со знаком


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

Модификаторы Действия
* подавить присваивание
цифра/цифры максимальная ширина поля ввода. Ввод прекращается когда указанная ширина достигнута или при обнаружении служебного символа
hh определяет считывание целого числа в виде signed char или unsigned char
ll определяет считывание целого числа в виде long long или unsigned long long
L, l, h определяет считывание числа в виде short int, unsigned short int, unsigned long, long, double или long double


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: