104.74K
Категория: ПрограммированиеПрограммирование

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

1.

Функция printf() и
форматированный вывод
• printf("%s\n", "Hello World");
• printf("%d\n", 5);
• printf("%5d %5d %5d\n", i, count+10, lines);
• %s - строка
• %d - целочисленный

2.

целочисленные типы:
• short — отводится меньше байтов, чем на int;
• long — отводится больше байтов, чем на int
(не всегда, зависит от системы);
• unsigned — столько же байт как у int, но без
отрицательных чисел; в результате чего
знаковый разряд освобождается, и количество
положительных значений увеличивается;
• unsigned short;
• unsigned long.
2 байта = 16 бит (от 0 до 65535, т. к. 2 = 65536)
16
4 байта = 32 бита (от -2 147 483 648 до 2 147 483 647)

3.

• При выводе длинных чисел следует
дополнять спецификацию формата буквой l
перед буквой формата. Например:
printf("%ld\n", i); printf("%15ld\n", i);

4.

Символы
(1 байт)
• У каждого символа есть соответствующее ему
целое число по таблице символов ASCII.
• Тип char языка программирования C включает
диапазон чисел от -128 до 127. Значения от 0 до 127
могут быть заданы или выведены на экран в виде
соответствующих символов (на самом деле не все).
• Если значение переменной задается в виде
символа, то символ заключается в одиночные
кавычки, например, так: 'w'. Также в языке
существует тип unsigned char с диапазоном чисел от
0 до 255.

5.

• Получается, что в программе символы —
это числа, а числа — символы. Тогда как
указать, что мы хотим видеть на экране:
символ или число? Для вывода на экран
символов используется спецификация
формата вида %c.

6.

Число 63 по таблице
символов ASCII
соответствует знаку '?'.
Сначала мы выводим
значение переменной ch в
формате символа, затем –
числа. Тоже самое с
переменной uch, однако ее
значение было задано через
символ, а не число.
#include <stdio.h>
main()
{
char ch = 63;
unsigned char uch = 'r';
short j = 'b', k = 99;
printf("%c == %d\n", ch, ch);
printf("%c == %d\n", uch, uch);
printf("%c, %c\n", j, k);
}
выдает такой результат:
? == 63
r == 114
b, c

7.

Вещественные типы данных
• double a = 0.0005;
• printf("%f\n", a);
• printf("%g\n", 0.0005);
• printf("%g\n", 0.00005);
• printf("%e\n", 0.0005);
• 0.000500
• 0.0005
• 5e-05
• 5.000000e-04

8.

%f
%g
%e
• выводится число в обычном виде. По умолчанию точность представления числа равна
шести знакам после точки
• число выводится как обычно, если количество значащих нулей не больше четырех. Если
количество значащих нулей четыре и больше, то число выводится в нормализованном виде
(третий случай). Запись 5e-5 означает 5 * 10-5, что равно 0.00005. А, например, запись
4.325e+3 является экспоненциальной записью 4.325 * 103, что равно 4325
• выведет число исключительно в нормализованном виде, каким бы это вещественное число
ни было
• Если при выводе требуется округлить число до определенной точности, то перед буквойформатом ставят точку и число-указатель точности. Например, printf("%.2f", 0.23) выведет
на экран 0.23, а не 0.230000. Когда требуется указать еще и поле, то его ширину
прописывают перед точкой, например, %10.3f.

9.

#include <stdio.h>
#include <conio.h>
void main() {
int a = 0x77, b = -20;
char c = 'F';
float f = 12.2341524;
double d = 2e2;
char* string = "Hello, World!";
printf("%.3f\n", f);
printf("%.*f\n", 2, f);
printf("%010.3f\n", d);
printf("%*d\n", 6, a);
printf("%+d\n", b);
printf("%0.6d\n", a);
printf("%.f\n", d);
printf("%.4s", string);
getch();
}
12.234
12.23
000200.000
119
-20
000119
200
Hell

10.

Таб. 1 Спецификатор типа
Спецификатор Что хотим вывести
d или i
Целое со знаком в в десятичном виде
u
Целое без знака в десятичном виде
o
Беззнаковое в восьмеричном виде
Пример
392
7235
657
x
Беззнаковое целое в шестнадцатеричном виде
7fa
X
Беззнаковое целое в шестнадцатеричном виде, верхний регистр
7FA
f или F
Число с плавающей точкой
3.4563745
e
Экспоненциальная форма для числа с плавающей точкой
3.1234e+3
E
Экспоненциальная форма для числа с плавающей точкой, верхний регистр
3.1234E+3
g
Кратчайшее из представлений форматов f и e
3.12
G
Кратчайшее из представлений форматов F и E
3.12
a
Шестнадцатеричное представление числа с плавающей точкой
-0xc.90fep-2
A
Шестнадцатеричное представление числа с плавающей точкой, верхний регистр
c
Буква
-0xc.90FEP2
a
s
Строка (нуль-терминированный массив букв)
Hello World
p
Адрес указателя
b8000000
n
Ничего не печатает. Аргументом должен быть указатель на signed int. По этому
адресу будет сохранено количество букв, которое было выведено до встречи %n
%
Два идущих друг за другом процента выводят знак процента
%

11.

#include <stdio.h>
#include <conio.h>
void main() {
int a = 0x77, b = -20;
char c = 'F';
float f = 12.2341524;
double d = 2e8;
char* string = "Hello, World!";
printf("%s\n", string);
printf("a = %d, b = %d\n", a, b);
printf("a = %u, b = %u\n", a, b);
printf("a = %x, b = %X\n", a, b);
printf("dec a = %d, oct a = %o, hex a = %x\n", a, a, a);
printf("floating point f = %f, exp f = %e\n", f, f);
printf("double d = %f or %E\n", d, d);
printf("not all compiler support %a\n", f);
printf("character c = %c, as number c = %d", c, c);
printf("address of string is %p", string);
getch();
}

12.

Таб. 2 Флаги
Флаг
Описание
-
Выключка влево на заданное
шириной значение
+
Явно указывать знак у числа, даже
для положительных чисел
(пробел)
Если знак не будет выведен, то
вставляет пробел перед
выводимым числом
#
Когда используется вместе с o, x
или X, вставляет перед числом 0,
0x или 0X
Когда используется со
спецификаторами a, A, e, E, f, F, g
или G, вставляет десятичную точку,
даже если после неё нет
десятичных знаков.
0
Вставляет нули, когда объявлен
спецификатор ширины

13.

Таб. 3 Ширина.
Ширина
Описание
(число)
Минимальное количество знаков,
которое необходимо вывести. Если
в числе меньше знаков, то
вставляет пробелы (или нули)
*
Ширина не указана в строке
формата, она передаётся отдельно
в виде аргумента, который должен
предшествовать выводимому числу

14.

Таб. 4 Точность
.Точность
Описание
.число
Для спецификаторов целых (d, i, o, u, x, X) точность определяет
минимальное количество знаков, которое необходимо вывести. Если
значение короче, то выводятся нули перед числом. Значение не
обрезается, даже если оно длиннее. Точночть 0 означает, что для
значения 0 ничего не выводится.
Для спецификаторов чисел с плавающей точкой (a, A, e, E, f, F) это
число знаков, которые необходимо вывести после десятичной точки (по
умолчанию 6).
Для g и G - это число значащих разрядов, которые необходимо
вывести.
Для s - выводится указанное число символов. По умолчанию выводятся
все символы до первого нулевого.
Если число не стоит, то по умолчанию точность равна 0
.*
Точность не указана в строке формата, она передаётся отдельно в виде
аргумента, который должен предшествовать выводимому числу

15.

• https://learnc.info/c/formatted_input_output.
html
English     Русский Правила