Программирование >>  Процедурные приложения 

1 ... 61 62 63 [ 64 ] 65 66 67 ... 150


переменной из списка задание формата вывода осуществляется с помощью следующего синтаксиса:

%[флаги][ширина][.точность][{h 1}]спецификатор

В простейшем случае указывается только знак процента и спецификатор, например %f. Обязательное поле спецификатор указывает на способ интерпретации переменной: как символа, строки или числа (табл. 10.2). Необязательное поле флаги определяет дополнительные особенности вывода (табл. 10.3).

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

Необязательное поле точность интерпретируется следующим образом:

при выводе чисел формата е, Е и fопределяет количество цифр после десятичной точки (последняя цифра округляется);

при выводе чисел формата gи G определяет количество значащих цифр (по умолчанию 6);

при выводе целых чисел определяет минимальное количество цифр (если цифр недостаточно, число дополняется ведущими нулями);

при выводе строк определяет максимальное количество символов, лишние символы отбрасываются (по умолчанию строка выводится, пока не встретится символ \о).

Поля ширина и точность могут быть заданы с помощью символа-заменителя *. В этом случае в списке переменных должны быть указаны их настоящие значения.

Необязательные модификаторы hи 1 определяют размерность целочисленной переменной: hсоответствует ключевому слову short, al - long.

Таблица 10.2. Спецификаторы типа переменной в функциях printf() и fprintf()

Спецификатор

Формат вывода

[Символ (переменная приводится к типу unsignedchar)

d, i

[Знаковое десятичное целое число

[Беззнаковое восьмеричное целое число

lint

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

[Беззнаковое шестнадцатеричное целое число (в качестве цифр от 10 до 15 используются буквы abcdef)

[Беззнаковое шестнадцатеричное целое число (в качестве цифр от 10 до 15 используются [буквы ABCDEF )

double

Знаковое число с плавающей запятой в формате [ - ] т. ddde xxx, где т - одна десятичная цифра, ddd- ноль или более десятичных цифр (количество определяется значением поля точность, нулевая точность подавляет вывод десятичной точки, по умолчанию точность - 6), е - символ экспоненты, ххх - ровно три десятичные цифры (показатель экспоненты)

double

То же, что и е, только вместо символа е применяется Е

jdouble

Знаковое число с плавающей запятой в формате [ - ] mmm.ddd, где mmm - одна или более десятичных цифр, ddd - ноль или более десятичных цифр (количество определяется значением поля точность, нулевая точность подавляет вывод десятичной точки, по умолчанию точность - 6)

double

Знаковое число с плавающей запятой в формате f или е; формат е выбирается, если показатель экспоненты меньше -4 или больше либо равен значению поля точность; [десятичная точка не ставится, если за ней не следуют значащие цифры; хвостовые нули не [выводятся

double

[То же, что и g, но при необходимости выбирается формат Е, а не е

[Ничего не выводится; количество символов, выведенных к данному моменту функцией, [записывается в переменную



[void *

[Адрес, содержащийся в указателе (отображается в формате х)

Ichar *

[Строка символов; вывод осуществляется до тех пор, пока не будет обнаружен символ \0 или число символов не станет равным значению поля точность

Таблица 10.3. Флаги в фугкциях printf() и fprintf()

Флаг

Назначение

Если число выведенных символов оказывается меньше указанного, результат выравнивается по левому краю поля вывода (по умолчанию принято правостороннее выравнивание)

При выводе знаковых чисел знак отображается всегда (по умолчанию знак устанавливается только перед отрицательными числами)

Если значению поля ширина предшествует символ 0, выводимое число дополняется ведущими нулями до минимальной ширины поля вывода (по умолчанию в качестве заполнителей применяются пробелы); при левостороннем выравнивании игнорируется

пробел

Если выводится положительное знаковое число, перед ним ставится пробел (по умолчанию пробел в таких случаях не ставится); игнорируется при наличии флага +

Для чисел формата о, х и X означает добавление ведущих 0, 0х и 0Х соответственно (по умолчанию отсутствуют); для чисел формата е, Е, g, G и f задает присутствие десятичной точки, даже когда за ней не следуют значащие цифры (по умолчанию точка в таких случаях не ставится); для чисел формата g и G предотвращает отбрасывание хвостовых нулей (по умолчанию отбрасываются)

Функция printf()

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

* printf.c

* Эта программа на языке С демонстрирует применение

* спецификаторов форматирования функции printfO.

#include <stdio.h> void main () { char с = А,

psz[]= Строка для экспериментов ;

int iln = 0, ivalue = 1234;

double dPi = 3.1415 92 65; /* 1 - вывод символа с */

printf( \n[%2d] %c ,++iln, c) ;

/* 2 - вывод ASCII-кода символа с */

printf< \n[%2d] %d ,++iln, c);

/* 3 - вывод символа с ASCII-кодом 90 */

printf( \n[%2d] %c ,++iln, 90);

/* 4 - вывод значения ivalue в восьмеричной системе */ printf( \n[%2d] %o ,++iln, ivalue);

/* 5 - вывод значения ivalue в шестнадцатеричной */ /* системе с буквами в нижнем регистре */ printf( \n[%2d]%x ,++iln, ivalue);

/* 6 - вывод значения ivalue в шестнадцатеричной */ /* системе с буквами в верхнем регистре */

printf( \n[%2d]%X ,++iln, ivalue);

/* 7 - вывод одного символа, минимальная ширина поля равна 5, */ /* выравнивание вправо с дополнением пробелами */

printf( \n[%2d]%5c ,++iln, с); .



/* 8 - вывод одного символа, минимальная ширина поля равна 5, */ /* выравнивание влево с дополнением пробелами */

printf( \n[%2d]%-5c ,++iln, с);

/* 9 - вывод строки, отображаются 24 символа */ printf( \n[%2d]%s ,++iln, psz);

/* 10 - вывод минимум 5-ти символов строки, отображаются 24 символа */

printf ( \n[%d]%5s ,-n-iln, psz);

/* 11 - вывод минимум 38-ми символов строки, */

/* выравнивание вправо с дополнением пробелами */

printf( \n[%d]%38s ,++iln, psz);

/*12 - вывод минимум 38-ми символов строки, */

/* выравнивание влево с дополнением пробелами */

printf( \n[%d]%-38s ,++iln, psz);

/* 13 - вывод значения ivalue, по умолчанию отображаются 4 цифры */ printf( \n[%d]%d ,++iln, ivalue);

/* 14 - вывод значения ivalueсо знаком */

printf( \n[%d]%+d ,++iln, ivalue);

/* 15 - вывод значения ivalueминимум из 3-х цифр, */ /* отображаются 4 цифры*/

printf( \n[%d]%3d ,++iln, ivalue);

/* 16 - вывод значения ivalueминимум из 10-ти цифр, */ /* выравнивание вправо с дополнением пробелами */ printf( \n[%d]%10d ,++iln, ivalue);

/* 17 - вывод значения ivalueминимум из 10-ти цифр, */ /* выравнивание влево с дополнением пробелами */

printf( \n[%d]%-10d ,++iln, ivalue);

/* 18 - вывод значения ivalue минимум из 10-ти цифр, */ /* выравнивание вправо с дополнением нулями */

printf ( \n[%d]%010d ,-n-iln, ivalue);

/* 19 - вывод значения dPiс форматированием по умолчанию */ printf( \n[%d]%f ,++iln, dPi); .

/* 20 - вывод значения dPi, минимальная ширина поля равна 20, */ /* выравнивание вправо с дополнением пробелами */

printf( \n[%d]%20f ,++iln, dPi) ;

/* 21 - вывод значения dPi, минимальная ширина поля равна 20, */ /* выравнивание вправо с дополнением нулями */

printf( \n[%d]%020f ,++iln, dPi) ;

/* 22 - вывод значения dPi, минимальная ширина поля равна 20, */

/* выравнивание влево с дополнением пробелами */

printf( \n[%d]%-20f ,++iln, dPi);

/* 23 - вывод 19-ти символов строки, */

/* минимальная ширина поля равна 19 */

printf( \n[%d]%19.19s ,++iln, psz);

/* 24 - вывод первых двух символов строки */

printf( \n[%d]%,2s ,++iln, psz);

/*25 - вывод первых двух символов строки, минимальная ширина поля */ /* равна 19, выравнивание вправо с дополнением пробелами */ printf( \n[%d]119.2s ,++iln, psz);

/* 26 - вывод первых двух символов строки, минимальная ширина поля */ /* равна 19, выравнивание влево с дополнением пробелами */

printf( \n[%d]%-19.2s ,++iln, psz);

/* 27 - вывод первых шести символов строки, минимальная ширина поля

/* равна 19, выравнивание вправо с дополнением пробелами */



1 ... 61 62 63 [ 64 ] 65 66 67 ... 150

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика