
- •3.1.1. Функции посимвольного ввода-вывода
- •3.1.1.1.Функции посимвольного ввода
- •Функции посимвольного стандартного ввода Функция getchar
- •Функция fgetchar
- •Функция ungetch
- •Функция getch
- •Функция getche
- •Функции посимвольного потокового ввода Функция fgetc
- •Функция getc
- •Функция ungetc
- •3.1.1.2. Функции посимвольного вывода
- •Функции стандартного вывода Функция putchar
- •3.1.2.Форматированный ввод-вывод
- •3.1.2.1.Форматированный ввод Функция scanf
- •Функция cscanf
- •Управляющая строка функций ввода
- •Модификатор
- •Символы преобразования и их смысл Тип переменной int
- •Тип переменной char
- •Тип переменной char*
- •Тип переменной float
- •3.1.2.2.Форматированный вывод Функция printf
- •Функция cprintf
- •Отдельные поля спецификации преобразования Флаги
- •Точность
- •Модификатор
- •Символы преобразования и их смысл Тип переменной int
- •Тип переменной char
- •Тип переменной char*
- •Тип переменной float
- •3.1.3. Функции построчного ввода-вывод
- •3.1.3.1.Функции построчного ввода Функция cgets
- •3.1.3.2.Функции построчного вывода Функция cputs
- •Лекция №2(продолжение)
- •4.1. Библиотека iostream
- •Буферизованные потоки (класс streambuf )
- •Потоковый класс ios
- •4.2.2. Потоковый ввод
- •4.3. Форматирование потокового ввода-вывода
- •4.3.1. Форматирующие функции-элементы
- •4.3.2. Флаги форматирования
Точность
(.)Точка, которая отделяет ширину поля от следующей строки цифр.
(.0)Для d, i, o, u, x точность по умолчанию. Для e, E, f десятичная точка отсутствует.
(.nnn) Строка цифр (точность), которая указывает максимальное число символов строки, которые должны быть напечатаны, или число печатаемых справа от десятичной точки цифр для переменных типа float или double. По умолчанию точность равна 6.
Модификатор
(l) Модификатор длины l, который указывает, что соответствующий элемент данных имеет тип long, а не int.
(h) Модификатор длины h, который указывает, что соответствующий элемент данных имеет тип short, а не int.
(F) Аргумент рассматривается как far–указатель.
(N) Аргумент рассматривается как near–указатель.
Пример:
Р=15.6734;
По умолчанию данное число принимает вид:
Р=15.673400 (количество символов после десятичной точки по умолчанию равно 6)
12 – Результат: 1 5 . 6 7 3 4 0 0
.12– Результат: 15. 6 7 3 4 0 0 0 0 0 0 0 0
12 .– Результат 1 6 (Если дробная часть <=5, то округляется в сторону уменьшения, а если >5 - в сторону увеличения)
12 .2– Результат: 1 5 . 6 7
Символы преобразования и их смысл Тип переменной int
d аргумент преобразуется к десятичному виду(тип int) со знаком.
i аргумент преобразуется к десятичному виду(тип int) со знаком.
o аргумент преобразуется в беззнаковую восьмеричную форму (без лидирующего нуля) - тип unsigned int.
x аргумент преобразуется в беззнаковую шестнадцатеричную форму (без лидирующих 0х) - тип unsigned int. При выводе используются символы 0 – f.
X аргумент преобразуется в беззнаковую шестнадцатеричную форму (без лидирующих 0X) - тип unsigned int. При выводе используются символы 0 – F.
u аргумент преобразуется в беззнаковую десятичную форму - тип unsigned int.
Тип переменной char
c аргумент рассматривается как отдельный символ.
Тип переменной char*
s аргумент является строкой: символы строки печатаются до тех пор, пока не будет достигнут нулевой символ или не будет напечатано количество символов, указанное в спецификации точности.
Тип переменной float
f аргумент, рассматриваемый как переменная типа float или double, преобразуется в десятичную форму в виде [-]mmm.nnnnn, где длина строки из n определяется указанной точностью. Точность по умолчанию равна 6. Отметим, что эта точность не определяет количество печатаемых в формате f значащих цифр.
e аргумент, рассматриваемый как переменная типа float или double, преобразуется в десятичную форму в виде [-]m.nnnnnne[+-]хх, где длина строки из n определяется указанной точностью. Точность по умолчанию равна 6.
E аргумент, рассматриваемый как переменная типа float или double, преобразуется в десятичную форму в виде [-]m.nnnnnnE[+-]хх, где длина строки из n определяется указанной точностью. Точность по умолчанию равна 6.
g используется или формат %е или %f, какой короче; незначащие нули не печатаются. Если идущий за % символ не является символом преобразования, то печатается сам этот символ; следовательно, символ % можно напечатать, указав %%.
G используется или формат %E или %F, какой короче; незначащие нули не печатаются. Если идущий за % символ не является символом преобразования, то печатается сам этот символ; следовательно, символ % можно напечатать, указав %%.
Примеры:
int x;
float y;
x=78;
y=98.56;
printf("Действительные числа -\n %12f\n %-12f\n %12.f\n",y,y,y);
printf("Действительные числа -\n %f\n %.4f\n %e\n",y,y,y);
printf("Целые -\n %d\n %o\n %u\n %x\n",х,x,x,x);
Результат:
Действительные числа –
98.559998
98.559998
99
Действительные числа –
98.559998
98.5600
9.856000e+1
Целые –
78
116
78
4e
Большинство из форматных преобразований очевидно и было проиллюстрировано в предыдущих главах. Единственным исключением является то, как точность взаимодействует со строками. Следующая таблица демонстрирует влияние задания различных спецификаций на печать "hello, world" (12 символов). Мы поместили двоеточия вокруг каждого поля для того, чтобы вы могли видеть его протяженность.
:%10s: :hello, world:
:%-10s: :hello, world:
:%20s: : hello, world:
:%-20s: :hello, world :
:%20.10s: : hello, wor:
:%-20.10s: :hello, wor :
:%.10s: :hello, wor:
Предостережение: printf использует свой первый аргумент для определения числа последующих аргументов и их типов. Если количество аргументов окажется недостаточным или они будут иметь несоответственные типы, то возникнет путаница и вы получите бессмысленные результаты.
Самостоятельная проработка: