Printf(“%–8.3sm”, “ABCDEF”); // ABCðððððsm

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

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

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

Функция форматированного вывода printf() имеет следующий синтаксис:

printf(форматная строка,аргумент_1,аргумент_2,…);

Форматная строка последовательность символов, заключенная в двойные кавычки, в которой можно с помощью спецификаторов задавать способ преобразования данных.

Спецификаторы– это символы, которые начинаются знаком % . Вся форматная строка в функции printf() выдается на экран, причем спецификаторы %xxx заменяются значениями выводимых аргументов.

аргумент_1,аргумент_2,… – это переменная, константа или любое унарное выражение, которое может быть заключено в скобки. Например:

int a=2,b=5,c;

printf(“a=%d,b=%d,сумма=%d,c=%d\n”,а,b,a+b,9); //a=2,b=5,сумма=7,с=9

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


Спецификаторы преобразования задается в виде:

%[флаги][ширина][.точность][l|L]<тип>

Имеются следующие типы преобразования переменных

%d %i – целое число типа intилиchar;

%u – беззнаковое целое число unsigned int;

%o– целое число типа intилиcharв 8-ой системе счисления;

%x – целое число типа intилиcharв 16-ой системе счисления;

%f – вещественное число типа float в виде целой и дробной части;

%e – вещественное число типа float в экспоненциальной форме;

%g – вещественное число в виде целой и дробной части или в экспоненциальной форме;

%c – целое число типа intили charв виде символа;

%s – строка;

– адрес переменной (&a).

Обратите внимание на модификаторы l и L.

Для переменных типа long int используются типы с модификатором %ld , %lo , %lu , %lx .

Для переменных типа double используются типы c модификатором %lf , %le , %lg .

Для переменных типа long double используются типы с модификатором %Lf , %Le , %Lg .

Ширина указывается в виде числа и определяет минимальное количество позиций, которые отводятся для вывода данных.

Если позиций недостаточно, то ширина игнорируется. Если их больше, чем выводимые данные, то пустые позиции дополняются пробелами. Например:

Printf(“%5s”, ”дискета”); // дискета

Printf(“%2d”, 400); // 400

Printf(“%10s”,”дискета”); // ðððдискета

Printf(“%7d”, 400); // ðððð400

Если в качестве значения ширины записать 0n, где n – число, определяющее ширину, то для целого числа позиции слева заполняются нулями.

Printf(“%07d”, 400); // 0000400

Если ширину поля задать *, следующий аргумент функции (после форматной строки) будет определять ширину.

Printf(“%*d”,5,10); // 5 – ширина поля, выведется ððð10


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

Printf(“%.0f”,5.47); // 5

Printf(“%8.2f”,5.3334); // ðððð5.33

Printf(“%10.5f”,–5.33); // ðð–5.33000

printf(“%.3e”,55.3334); // 5.533e+01

Если точность поля задать звездочкой *, следующий аргумент функции (после форматной строки) будет определять точность.

Printf(“%6.*f”,2,7.1234); // точность 2, выведется ðð7.12

Если ширину поля и точность поля задать звездочками *.*, тогда второй аргумент функции будет определять ширину поля, а третий – точность.

Printf(“%*.*f”,8,2,7.1234); // ðððð7.12

Для строковой константы также распространяется понятие ширины и точности. Здесь под точностью понимаем количество выводимых символов из строки.

Printf(“%8.3s”, “ABCDEF”); // ðððððABC


Рассмотрим флаги .

· задает выравнивание числа влево. Справа будут пробелы.

Printf(“%–6dkm”,30); // 30ððððkm

printf(“%–8.3sm”, “ABCDEF”); // ABCðððððsm

· + задает вывод перед числом арифметического знака числа, т.е. перед числами будут печататься знаки + и . Иначе печатается только .

printf(“%+d”,300); // +300

printf(“%+d”,-300); // -300

· пробел задает вывод перед положительным числом пробела.