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
· пробел задает вывод перед положительным числом пробела.