АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Форматный ввод-вывод

Читайте также:
  1. Ввод-вывод. Общие сведения

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

Для работы со стандартными потоками в режиме форматного

ввода-вывода определены две функции.

 

printf() - форматный вывод;

scanf() - форматный ввод.

Форматный вывод в стандартный выходной поток. Прототип функции printf() имеет вид:

int printf(const char *format,...);

 

При обращении к функции printf() возможны две формы задания первого параметра:

 

int printf (форматная строка, список_аргументов};

int printf (указатель на_форматную_строку, список аргументов);

 

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

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

Форматная_строка ограничена двойными кавычками и может включать произвольный текст, управляющие символы и спецификации преобразования данных. Текст и управляющие символы из форматной строки просто копируются в выходной поток. Форматная строка обычно размещается в списке фактических параметров функции, что соответствует первому варианту вызова функции printf(). Второй вариант предполагает, что первый фактический параметр - это указатель типа char *, a сама форматная строка определена в программе как обычная строковая константа или переменная.

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

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

Спецификатор Тип аргумента   Формат вывода  
d int, char, Десятичное целое со знаком
  unsigned  
i int, char, Десятичное целое со знаком
  unsigned  
u int, char, Десятичное целое без знака
  unsigned  
  int, char, Восьмеричное целое без знака
  unsigned  
x int, char, Шестнадцатеричное целое без знака; при выводе ис-
  unsigned пользуются символы "0...9a...f
X int, char, Шестнадцатеричное целое без знака; при выводе ис-
  unsigned пользуются символы "0...9A...F
f double, Вещественное значение со знаком в виде:
  float знак _ числа dudd.dddd,
    где dddd - одна или более десятичных цифр. Количество цифр перед десятичной точкой зависит от величины выводимого числа, а количество цифр после десятичной точки зависит от требуемой точности. Знак числа при отсутствии модификатора '+' изображается только для отрицательного числа
   
   
   
   
е double, float Вещественное значение в виде: знак числа m. dddde знак xxx, где m.dddd - изображение мантиссы числа; m - одна десятичная цифра; dddd - последовательность десятичных цифр; е - признак порядка; знак - знак порядка; ххх - десятичные цифры для представления порядка числа; знак числа при отсутствии модификатора '+' изображается только для отрицательного числа
Е double, float Идентичен спецификатору "е", за исключением того, что признаком порядка служит "Е"
g double, float Вещественное значение со знаком печатается в формате спецификаторов "f'' или "е" в зависимости от того, какой из них более компактен для данного значения и точности. Формат спецификатора "е" используется тогда, когда значение показателя меньше -4 или больше заданной точности. Конечные нули отбрасываются, а десятичная точка появляется, если за ней следует хотя бы одна цифра
G double, float Идентичен формату спецификатора "g", за исключением того, что признаком порядка служит "Е"
с int, char, unsigned Одиночный символ
S char * Символьная строка. Символы печатаются либо до первого нулевого символа ('\0') или печатается то количество символов, которое задано в поле точность спецификации преобразования
р void * Значение адреса. Печатает адрес, указанный аргументом (представление адреса зависит от реализации)
       

Список_аргументов (с предшествующей запятой) может отсутствовать.

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

% флаги ширина_поля.точностъ модификатор спецификатор

Символ % является признаком спецификации преобразования. В спецификации преобразования обязательными являются только два элемента: признак % и спецификатор.

Спецификация преобразования не должна содержать внутри себя пробелов. Каждый элемент спецификации является одиночным символом или числом.

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

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

 

Таблица 7.1

 


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 |

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



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.004 сек.)