Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
+ЭУМКД КИТ-ч1-Бутов.docx
Скачиваний:
9
Добавлен:
05.05.2019
Размер:
262.85 Кб
Скачать

Функции форматного вывода и ввода printf и scanf

Функция printf стандартной библиотеки предназначена для форматного вывода данных и имеет следующий прототип:

int printf (char *format, arg1, arg2, . . . );

Функция printf преобразует, форматирует и печатает свои аргументы arg1, arg2 и т.д. в стандартном выводе (обычно на экране) в соответствии с информацией, заданной аргументом format, и возвращает количество напечатанных символов.

Форматная строка format содержит два вида объектов: обычные символы, которые непосредственно копируются в выходной поток, и спецификации преобразования, каждая из которых вызывает преобразование и печать очередного аргумента функции printf. Любая спецификация преобразования начинается знаком % и заканчивается символом-спецификатором. Между знаком % и символом-спецификатором могут быть расположены (в указанном ниже порядке) следующие элементы:

  • Знак минус, предписывающий «прижать» преобразованный аргумент к левому краю поля.

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

  • Точка, отделяющая ширину поля от величины, устанавливающей точность.

  • Число (точность), задающее максимальное количество печатаемых символов строки, или количество цифр после десятичной точки – для плавающего значения, или минимальное количество цифр – для целого значения.

  • Буква h, если печатаемое целое должно рассматриваться как short, или l (латинская буква «эль»), если целое должно рассматриваться как long.

Перечень символов-спецификаторов и задаваемые ими преобразования вывода

Символ-спецификатор

Тип аргумента

Вид печати

d, i

int

Десятичное целое

O

int

Беззнаковое восьмеричное целое (без ведущего нуля)

x, X

int

Беззнаковое шестнадцатиричное целое (без ведущих и ), для 10,11, … ,15 используются abcdef или ABCDEF

u

int

Беззнаковое десятичное целое

C

int

Одиночный символ

S

char *

Печатаются символы, расположенные до нуль-символа (‘\0’), или в количестве, заданном точностью

F

double

[ - ]m.dddddd, где количество цифр d задается точностью (по умолчанию равно 6)

e, E

double

[ - ]m.ddddddexx или [ - ]m.ddddddExx, где количество цифр d задается точностью (по умолчанию равно 6)

g, G

double

Применяется %e или %E, если порядок меньше, чем -4, или больше или равен точности; в противном случае применяется %f. «Хвостовые» нули и «хвостовая» десятичная точка не печатаются

P

void *

Указатель (представление зависит от реализации)

%

Печатается знак %

Функция scanf стандартной библиотеки предназначена для форматного ввода данных и имеет следующий прототип:

int scanf (char *format, arg1, arg2, . . . );

Функция scanf читает символы из стандартного входного потока (обычно с клавиатуры), интерпретирует их согласно спецификациям строки format и рассылает результаты в свои аргументы arg1, arg2 и т.д. Эти аргументы, каждый из которых должен быть указателем, определяют, где будут запоминаться должным образом преобразованные данные.

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

fflush(stdin);

Строка format, управляющая преобразованиями ввода, может включать в себя следующие элементы:

  • Пробелы или табуляции, которые игнорируются.

  • Обычные литеры (исключая %), которые, как ожидается, совпадут с очередными непробельными символами входного потока.

  • Спецификации преобразования, каждая из которых начинается со знака % и завершается символом-спецификатором типа преобразования. В промежутке между ними могут располагаться, причем в указанном здесь порядке: знак * (признак подавления присваивания); число, определяющее ширину поля; буква h, l или L, указывающая на размер получаемого значения.

Перечень символов-спецификаторов и задаваемые ими преобразования ввода

Символ-спецификатор

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

Тип аргумента

D

Десятичное целое

int *

I

Целое, которое может быть восьмеричным (с ведущим 0) или шестнадцатиричным (с ведущими или )

int *

O

Восьмеричное целое (с ведущим нулем или без него)

int *

u

Беззнаковое десятичное целое

unsigned int *

X

Шестнадцатиричное целое (с ведущими или или без них)

int *

C

Следующие символы ввода (по умолчанию один) размещаются в указанном месте. Пробельные символы не пропускаются; чтобы прочесть очередной символ, отличный от пробельного, используйте %1s

char *

S

Строка символов (без обрамляющих кавычек). Завершающий нуль-символ (‘\0’) будет добавлен

char *

e, f, g

Число с плавающей точкой, возможно со знаком; обязательно присутствие либо десятичной точки, либо экспоненциальной части, а возможно, и обеих вместе

float *

%

Сам знак %, никакое присваивание не выполняется

Перед символами-спецификаторами d, i, o, u, x может стоять буква h, указывающая на то, что соответствующий аргумент должен иметь тип short * (а не int *), или l (латинская «эль»), указывающая на тип long *. Аналогично, перед символами-спецификаторами e, f, g может стоять буква l, указывающая, что тип аргумента – double * (а не float *).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]