8.4. Форматированный ввод/вывод. в языке Си кратко…
Привет, сегодня поговорим про форматированный ввод/вывод в языке си, обещаю рассказать все что знаю. Для того чтобы лучше понимать что такое форматированный ввод/вывод в языке си , настоятельно рекомендую прочитать все из категории Алгоритмизация и программирование. Структурное программирование. Язык C
Задачи ввода/вывода в языке Си решают функции printf() и scanf().
Операторы вывода используются для вывода значений переменных и текста.
Тексты в Си записываются в кавычках. В языке Си отсутствует специальный тип для работы со строками. Вместо этого строки представляются как массив типа char. Элементы строки, хранясь в массиве, записываются в смежные ячейки памяти. В конце строки ставится отметка \0. Наличие этой отметки говорит о том, что строка должна иметь размер на единицу больший, чем количество символов. Объявляется строка указанием типа char и записью размера в [].
Пример:
Для работы со строками к программе необходимо подключить файл string.h.
Каждая из функций ввода/вывода использует управляющую строку и список аргументов. Управляющая строка записывается первой и заключается в кавычки. Управляющие строки и аргументы не перемешиваются. Управляющие строки прежде всего содержат указание на вывод значения того или иного типа. Их называют спецификаторами преобразования.
Спецификаторы | Действия |
%a, %A | возвращают число с плавающей точкой и 16-е цифры |
%c | возвращает одиночный символ |
%d, %i | возвращают целое число в десятичной форме |
%e, %E | возвращают число с плавающей точкой в экспоненциальной форме |
%f | возвращает число с плавающей точкой в десятичной форме |
%g | использует спецификатор %f или %e в зависимости от значения (выбирается автоматически) |
%o | возвращает восьмеричное целое число без знака |
%p | вывод указателя в шестнадцатеричном формате |
%s | возвращает строку символов |
%u | возвращает десятичное целое число без знака |
%x, %X | возвращают шестнадцатеричное целое число без знака |
%% | вывод на печать символа % |
Основную спецификацию можно модифицировать вставляя между % и символом преобразования модификаторы . Об этом говорит сайт https://intellect.icu .
Модификаторы | Действия | |
цифра/цифры | минимальная ширина поля вывода (количество экранных символов) | |
.цифра | точность | |
h | используется при целочисленных преобразованиях для кодирования значений short int и unsigned short int | |
hh | используется при целочисленных преобразованиях для кодирования значений signed char и unsigned char | |
j | используется при целочисленных преобразованиях для получения типов int_max_t и uint_max_t | |
l | используется при целочисленных преобразованиях для получения типа long int и unsigned long int | |
ll | используется при целочисленных преобразованиях для получения типа long long int и unsigned long long int | |
t | используется с целью кодирования значений типа ptroliff_t, который является разностью двух указателей | |
z | используется с целью кодирования значений size_t | |
L | используется при преобразовании чисел с плавающей точкой типа long double | |
флаг | + | значения со знаком печатаются со знаком «+» или «-« |
флаг | — | элемент выравнивается по левому краю |
флаг | пробел | значение со знаком «+» печатается с пробелом, но без знака |
флаг | # | для спецификаторов %o, %x, %X выводит не значащие нули. Для форм с плавающей точкой гарантировано печатается точка, даже если десятичных знаков нет |
флаг | 0 | для числовых форм вместо пробелов на свободные экранные места выводятся нули |
Ввод данных осуществляется с помощью функции scanf(). В языке Си существует несколько функций ввода. scanf() употребляется чаще других, т.к. ей присущ различный формат ввода. Также как и функция printf(), ввод использует управляющую строку, сопровождаемую списком аргументов. Управляющая строка указывает в какие форматы должен быть преобразован вводимый текст. В качестве параметров функция scanf() использует не сами переменные, а указатели на них. Для использования scanf()необходимо выполнять два правила:
1) если функция используется для считывания значений в переменную основного типа, то перед именем переменной ставится знак &.
2) если значение считывается в символьный массив, то символ & не ставится.
Преобразование одного вводимого данного осуществляется указанием спецификатора преобразования. Если данных вводится несколько, то они разделяются знаком пробела.
Спецификаторы | Действия |
%c | интерпретирует результат ввода в качестве символа |
%d | интерпретирует результат ввода как десятичное целое число со знаком |
%e, %f, %g, %a | интерпретирует результат ввода как число с плавающей точкой |
%E, %F, %G, %A | интерпретирует результат ввода как число с плавающей точкой. Все вводимые символы преобразуются в заглавные |
%o | интерпретирует результат ввода как восьмеричное целое число со знаком |
%з | интерпретирует результат ввода как указатель |
%s | интерпретирует результат ввода как строку. Ввод начинается с первого символа, не являющегося служебным и включает все символы до следующего служебного |
%u | интерпретирует результат ввода как целое число без знака |
%x, %X | интерпретирует результат ввода как шестнадцатеричное целое число со знаком |
Между знаком % и символом преобразования могут использоваться модификаторы. Если их более одного, то они должны записываться в порядке, указанном в таблице ниже:
Модификаторы | Действия |
* | подавить присваивание |
цифра/цифры | максимальная ширина поля ввода. Ввод прекращается когда указанная ширина достигнута или при обнаружении служебного символа |
hh | определяет считывание целого числа в виде signed char или unsigned char |
ll | определяет считывание целого числа в виде long long или unsigned long long |
L, l, h | определяет считывание числа в виде short int, unsigned short int, unsigned long, long, double или long double |
Если я не полностью рассказал про форматированный ввод/вывод в языке си? Напиши в комментариях Надеюсь, что теперь ты понял что такое форматированный ввод/вывод в языке си и для чего все это нужно, а если не понял, или есть замечания, то нестесняся пиши или спрашивай в комментариях, с удовольствием отвечу. Для того чтобы глубже понять настоятельно рекомендую изучить всю информацию из категории Алгоритмизация и программирование. Структурное программирование. Язык C
Спецификаторы типов — Студопедия
————————————————————
Типы целых Типы плавающих Другие типы
————————————————————
signed char float void
signed int double
signed short intsigned long int
unsigned char
unsigned int
unsignet short int unsigned long int
————————————————————
Табл. 4.1. Основные типы.
Перечислимые типы также рассматриваются как основные типы. Спецификаторы перечислимых типов рассмотрены в разделе 4.7.1. Типы signed char, signed int, signed short int и signed long int
вместе с соответствующими двойниками unsigned называются типами целых.
Спецификаторы типов float и double относятся к типу «плавающих». В об»явлениях переменых и функций можно использовать любые спецификаторы «целый» и «плавающий».
Тип void может быть использован только для об»явления функций, которые не возвращают значения. Типы функций рассмотрены в разделе 4.4.
Можно задать дополнительные спецификаторы типа путем об»явления typedef, описанного в разделе 4.7.2.
При записи спецификаторов типов допустимы сокращения как показано в табл. 4.2. В целых типах ключевое слово signed может быть опущено. Так, если ключевое слово unsigned опускается в записи спецификатора типа, то тип целого будет знаковым, даже если опущено ключевое слово signed.
В некоторых реализациях могут быть использованы опции компилятора, позволяющие изменить умолчание для типа char со знакового на беззнаковый. Когда задана такая опция, сокращение char имеет то же самое значение, что и unsigned char, и следовательно ключевое слово sidned должно быть записано при об»явлении символьной величины со знаком.
————————————————————
Спецификатор типа Сокращение
————————————————————
signed char char
signed int signed, int
signed short int short, signed short
signed long int long, signed long
unsigned char —
unsigned int unsigned
unsigned short int unsignet short
unsignet long int unsignet long
float —
long float double
————————————————————
Табл. 4.2. Спецификаторы и сокращения
Замечание: в этом руководстве в основном используются сокращенные формы, перечисленные в Табл. 4.2, при этом предполагается, что char по умолчанию знаковый.
В табл. 4.3 для каждого типа приведены: размер распределяемой памяти и области значений переменных для данного типа. Поскольку тип void не представляет переменных, он не включен в эту таблицу.
————————————————————
Тип Представление Область значений
в памяти величины
————————————————————
char 1 байт -128 до 127
int зависит от
реализации
short 2 байта -32768 до 32767
long 4 байта -2.147.483.648 до 2.147.483.647
unsigned char 1 байт 0 до 255
unsigned зависит от
реализации
unsigned short 2 байта 0 до 65535
unsigned long 4 байта 0 до 4.294.967.295
float 4 байта IEEE стандартное
соглашение
double 8 байт IEEE стандартное
соглашение ————————————————————
Табл 4.3 Размер памяти и область значений типов
Тип char используется для запоминания буквы, цифры или символа из множества представимых символов. Значением об»екта типа char является ASCII код, соответствующий данному символу. Так как тип char интерпретируется как однобайтовая целая величина с областью значений от -128 до 127, то только величины от 0 до 127
имеют символьные эквиваленты. Аналогично, тип unsigned char может запоминать величины с областью значений от 0 до 255.
Заметим, что представление в памяти и область значений для типов int и unsigned int не определены в языке Си. По умолчанию размер int (со знаком и без знака) соответствует реальному размеру целого на данной машине. Например, на 16-ти разрядной машине тип int всегда 16 разрядов или 2 байта. На 32-ух разрядной машине тип int всегда 32 разряда или 4 байта. Таким образом, тип int эквивалентен типам short int или long int в зависимости от реализации.
Аналогично, тип unsigned int эквивалентен типам unsigned short или unsigned long. Спецификаторы типов int и unsigned int широко используются в программах на Си, поскольку они позволяют наиболее эффективно манипулировать целыми величинами на данной машине.
Однако, размер типов int и unsigned int переменный, поэтому программы, зависящие от специфики размера int и unsigned int могут быть непереносимы. Переносимость кода можно улучшить путем включения выражений с sizeof операцией.
Использование спецификаторов const, volatile и extern.
Давно уже собирался и вот решил сделать небольшую шпаргалку по основным спецификаторам, к помощи которых можно и нужно прибегать при программировании. Без лишних слов, сразу же, переходим к сути.
Квалификатор типа const.Все переменные, определенные с использованием этого ключевого слова не могут изменить своего значения во время выполнения программы. На то они и константы 🙂 Чаще всего спецификатор const используется так: когда в программе много раз используется одно и то же числовое значение, создается переменная, имеющая определенное имя, значение которой равно этому числовому значению. Так как переменная не меняется при выполнении программы, используется ключевое слово const. И теперь вместо использования числового значения можно использовать имя константы, что заметно облегчает понимание написанного кода и последующую работу с ним. Поэтому настоятельно рекомендуется в качестве имен переменных использовать что-либо осмысленное, а не просто первый пришедший на ум набор букв. Например, нужно объявить константу, которая будет хранить значение максимального количества принятых байт. Тогда:
// Удачное имя переменной const int maxNumOfBytes = 64; // Неудачное имя переменной const int var123 = 64;
В принципе это основное применение спецификатора const, поэтому, думаю, нет смысла углубляться, так что идем дальше.
Квалификатор типа volatile.Этот замечательный спецификатор позволяет нам использовать переменную, значение которой может изменяться неявно в процессе выполнения программы. Что же это значит? А вот пример:
bool test = FALSE; if (test) { .... }
Так как наша переменная test нигде явно не изменяется (то есть не стоит слева от оператора присваивания) то заботливый компилятор в результате оптимизации прочитает ее значение только один раз и больше не станет, переменная то на его взгляд нигде не изменяется! А эта переменная на самом деле может принять другое значение в результате выполнения другого потока, либо изменить свое значение неявно в прерывании. А это уже катастрофа! И для того, чтобы ее предотвратить как раз и используется спецификатор volatile. То есть объявить нашу переменную мы должны так:
volatile bool test = FALSE;
Продолжаем…
Спецификатор класса памяти extern.Если программа состоит из нескольких файлов, как почти всегда и бывает, то без ключевого слова extern не обойтись. Пусть в разных файлах используется одна и та же переменная x. Значит каждый файл должен знать о существовании этой переменной, но просто объявить переменную во всех файлах не прокатит — компилятор этого не допустит. Тут то и придет на помощь спецификатор extern. Вот пример: пусть программа состоит из двух файлов, в каждом из которых есть функции, использующий переменную x:
Файл 1:
unsigned char x; void main() { x = 0x55; ... }
Файл 2:
extern unsigned char x; void testFunction() { x += 0x10; }
При таком объявлении переменной ошибки не будет и все скомпилируется успешно.
Тут есть важный момент — а именно разница между понятиями определить и объявить переменную. При объявлении переменной ей присваивается определенный тип и значение, а при определении — для нее выделяется память. Таким образом, если перед именем переменной стоит спецификатор extern, то мы объявляем переменную, не определяя ее.
Вот собственно и все 🙂 Получилась небольшая памятка, которая позволит сразу же и без проблем разобраться с этими ключевыми словами без путаницы.
Форматирование при помощи % в Python
Форматирование строк в стиле printf при помощи оператора интерполяции %.
Строки и unicode реализуют поддержку оператора % (деление по модулю; оператор интерполяции строки), который используется для форматирования строк.Оператор заменяет маркеры в строке значениями из форматируемого объекта. Подход похож на использование sprintf()
в языке Си.
%s
является Unicode-объектом, то результат тоже будет unicode.Если формат требует лишь одного аргумента, то форматируемый объект может не заключаться в кортеж. В прочих случаях форматируемый объект должен являться кортежем с количеством элементов достаточным для форматирования, либо отображением, например, словарём.
'%s %d' % ('number', 5) # 'number 5'
'number %d' % 5 # 'number 5'
'%d%%' % 100 # '100%'
Общий вид маркера:
%[(имя)][флаги][минразмер][.точность]тип
.Маркеры замены (спецификаторы преобразования) могут состоять из следущих компонентов в указанном порядке:
1. Символ %
указывает на начало маркера;
2. Опция. Имя маркера в скобках, например (somename)
;
Когда в качестве форматируемого объекта выступает словарь (либо другое отображение) требуется указание имени маркера. Подразумевается, что имя маркера будет совпадать с одним из ключёй отображения.
'%(left)s выше, чем %(right)s.' % {'left': 'Вася', 'right': 'Петя'}
# Вася выше, чем Петя.
3. Опция. Флаги преобразования, влияющие на результат некоторых типов преобразований;
# | Использовать альтернативную форму представления (если доступна для выбранного типа преобразования). |
0 | Добить число нулями. |
- | Равнение влево. Перекрывает флаг 0 , если тот указан. |
пробел | Добавить пробел перед положительным числом (или пустой строкой). |
+ | Добавить знак числа — + или - . Перекрывает флаг пробел . |
'%04d' % 5 # '-005'
'%04d' % 5 # '0005''%4d' % -5 # ' -5'
'%-4d' % -5 # '-5 '
'% d' % 5 # ' 5'
'% d' % -5 # '-5'
'%d' % 5 # '5'
'%+d' % 5 # '+5'
4. Опция. Минимальный размер. Если указан
*
(астериск), размер будет считан из форматируемого кортежа; '%d' % 5 # '5'
'%3d' % 5 # ' 5'
'%*d' % (3, 5) # ' 5'
5. Опция. Точность. Задаётся после
.
(точки). Если указан *
(астериск), размер будет считан из форматируемого кортежа; '%f' % 5 # '5.000000'
'%.2f' % 5 # '5.00'
'%.*f' % (2, 5) # '5.00'
6. Опция. Длина. Модификатор длины (
h
, l
, или L
) можно указать, но он будет проигнорирован, так как не используется в Питоне %ld
то же что и %d
.;7. Тип преобразования.
d / i | Знаковое целое. Десятичный формат. |
o | Знаковое восьмеричное. В альтернативной форме добавляется ведущий 0 (ноль), если его нет. |
u | Устаревший тип, то же что и d . См. PEP-237. |
x , X | Знаковое шестнадцатеричное (нижний и верхний регистр соответственно). В альтернативной форме добавляется ведущий 0x 0X , если его нет. |
e , E | С плавающей запятой (нижний и верхний регистр соответственно). Экспоненциальный формат. ※ |
f , F | С плавающей запятой. Десятичный формат. +py2.7 +py3.1 Данный формат для чисел с абсолютным значением превышающим 1e50 более не заменяется на %g . ※ |
g , G | С плавающей запятой. Использует экспон. формат, если экспонента меньше -4, иначе десятичный. ※※ |
c | Одиночный символ. Может принять целое, либо строку с одним символом. |
r | +py2.0 Строка. Использует repr(). ※※※ |
s | Строка. Испольует str(). ※※※ |
a | +py3.0 Строка. Использует ascii(). ※※※ |
% | Используется для получения символа % в результирующей строке. |
※ Альтернативная форма всегда будет содержать точку, даже если за ней не следуют цифры. Точность определяет количество знаков после точки — по умолчанию 6 (шесть).
※※ Альтернативная форма всегда будет содержать точку, а нули в конце не будут обрезаны. Точность определяет количество значащих цифр до и после точки — по умолчанию 6 (шесть).
※※※ Точность — максимальное количество символов, которые требуется вывести.
Ввиду того, что длина строки в Питоне является признаком объекта, преобразование %s
не считает символ \0
окончанием строки.
Синонимы поиска: Форматирование при помощи %, %, modulo, %d, %s, printf
Что такое спецификаторы класса хранения в C?
авто
Переменная, указанная с помощью спецификатора auto
, принадлежит к классу хранения automatic . Эта переменная имеет следующие свойства:
Место хранения | Срок службы | Объем | Начальное значение |
---|---|---|---|
Память ЦП | В теле функции | местный | Значение мусора |
Переменные, определенные в функциональном блоке, являются локальными по отношению к функции.Переменная недоступна за пределами функционального блока, потому что она уничтожается при выходе из блока.
статический
Переменная, указанная с помощью спецификатора static
, принадлежит к классу хранения static . Эта переменная имеет следующие свойства:
Место хранения | Срок службы | Объем | Начальное значение |
---|---|---|---|
Память ЦП | Сохраняет значение переменной | местный | Ноль |
Статическая переменная
будет сохранять свое значение между вызовами различных функций.
регистр
Переменная, указанная с помощью спецификатора регистра
, принадлежит к классу хранения регистра . Эта переменная имеет следующие свойства:
Место хранения | Срок службы | Объем | Начальное значение |
---|---|---|---|
Регистровая память | В теле функции | местный | Значение мусора |
Переменные, определенные в функциональном блоке, являются локальными по отношению к функции.Они недоступны вне функции, как и спецификатор auto
. Однако переменная регистра сохраняется в памяти регистров, а не в памяти процессора, что обеспечивает более быстрый доступ к переменным.
внешний
Переменная, указанная с помощью спецификатора extern
, принадлежит к классу внешней памяти . Эта переменная имеет следующие свойства:
Место хранения | Срок службы | Объем | Начальное значение |
---|---|---|---|
Память ЦП | До конца программного файла | Глобальный | Ноль |
Переменная extern
определяется в любом месте файла и доступна в любом месте основного исходного файла или других файлов.
Переменная, которая не инициализирована, но имеет выделенную память, хранит мусорное значение .
Практика языковой лаборатории C по строкам и символам, спецификаторам формата и определению директив препроцессора Учебники по программированию
% PDF-1.6 % 1 0 объект > эндобдж 13 0 объект > эндобдж 5 0 obj > эндобдж 4 0 obj > поток 2008-04-07T10: 21: 14 + 08: 002008-04-07T10: 21: 11 + 08: 002008-04-07T10: 21: 14 + 08: 00application / pdf
Спецификаторы доступа в C ++ - Типы спецификаторов доступа в C ++ - Открытый спецификатор - Защищенный спецификатор
C ++ предлагает возможность управления доступом к членам класса и функциям с помощью спецификаторов доступа.Спецификаторы доступа используются для защиты данных от неправомерного использования.
В классе Person из предыдущего раздела мы использовали только общедоступных спецификаторов доступа для всех членов данных:
Pin
Типы спецификаторов доступа в C ++
- общедоступные
- частные
- защищенный
Открытый спецификатор
Общедоступные члены и функции класса могут использоваться извне класса любой функцией или другими классами.Вы можете получить доступ к публичным элементам данных или функциям напрямую, используя оператор точка (.) Или (оператор стрелки-> с указателями).
Защищенный спецификатор
Защищенные члены класса и функции могут использоваться внутри своего класса. К защищенным членам и функциям нельзя получить доступ напрямую из других классов. Дополнительно защищенный спецификатор доступа позволяет дружественным функциям и классам получать доступ к этим элементам данных и функциям. Защищенные элементы данных и функции могут использоваться классом, производным от этого класса.Более подробную информацию о модификаторах доступа и наследовании можно найти в C ++ Inheritance
Private Specifier
Private class members and functions can be used only inside of class and by friend functions and classes.
Мы можем изменить класс Person , добавив элементы данных и функцию с разными спецификаторами доступа:
class Person { public: // контроль доступа string firstName; // эти элементы данных string lastName; // можно получить доступ tm dateOfBirth; // откуда угодно защищено: string phoneNumber; // к этим членам можно получить доступ внутри этого класса, int salary; // дружественными функциями / классами и производными классами частный: string addres; // к этим членам можно получить доступ внутри класса long int insuranceNumber; // и дружественными классами / функциями };
Спецификатор доступа влияет на все элементы и функции до следующего спецификатора доступа:
Pin
Для классов спецификатор доступа по умолчанию - private. Спецификатор доступа по умолчанию для объединений и структур - public.
Scanf in C
Функция scanf - одна из самых известных и полезных функций языка C. Это позволяет программе на C принимать ввод из стандартного потока ввода, в основном с клавиатуры. После того, как scanf считывает данные со стандартного ввода, он сохраняет значение в соответствии с указанным форматом параметра.Из этого туториала Вы узнаете, как использовать функцию scanf в программах на языке C.
Спецификаторы форматаСпецификаторы формата Scanf, которым предшествует знак процента, описывают тип и формат данных, полученных из входного потока.
Синтаксис описателя формата scanf:
% [*] [ширина] [длина] спецификатор.
Параметры в квадратных скобках необязательны.
- Звездочка (*) указывает, что данные считываются из входного потока, но не сохраняются в указанном аргументе.
- Ширина - ширина определяет максимальное количество символов стандартного ввода.
- Длина - длина определяет размер. Длина указывается в виде hh, h, l, ll, j, z, t, L .
- Спецификатор - определяет тип данных, считываемых из входного потока.
- Функция scanf поддерживает следующие спецификаторы.
- % i,% d - Спецификатор формата целого числа со знаком
- % u - Целое число без знака
- % f,% e или% E - формат с плавающей запятой
- % 0 - Восьмеричное целое число без знака
- % x,% X - Беззнаковое шестнадцатеричное целое число.
- % s - Формат строки
- % c - Спецификатор формата символа
В следующих примерах показано, как использовать scanf для чтения данных со стандартного ввода.
#includeint main () {
int scanme;
scanf ("% d", & scanme);
printf ("Значение scanme% d", scanme);
возврат 0;
}
В приведенном выше примере считывается целочисленное значение из ввода и сохраняется в переменной scanme.
#includeint main () {
char scanme;
scanf ("% c", & scanme);
printf ("Значение scanme% c", scanme);
возврат 0;
}
В приведенном выше примере считывается символьное значение из стандартного ввода.
#includeint main () {
char scanme [10];
scanf ("% s", & scanme);
printf ("Значение scanme% s", scanme);
возврат 0;
}
В этом примере выполняется чтение строки из стандартного ввода.
При закрытииВ этом руководстве мы узнали основы функции scanf и то, как мы можем использовать ее для чтения ввода из стандартного ввода. Чтобы узнать больше, обратитесь к справочному руководству по stdio.h или запустите команду man scanf в Linux.
Форматированный вывод
Форматированный выводФорматы печати · Функции печати · Спецификаторы преобразования печати
Несколько функций библиотеки помогут вам преобразовать значения данных из
закодированные внутренние представления текстовых последовательностей, которые
в целом читается людьми. Вы предоставляете
строка формата как значение формат
аргумент каждой из этих функций, следовательно
термин отформатировал вывод .
Функции делятся на две категории.
Функции печати байта (заявлено в
)
преобразовать внутренние представления в последовательности типа char, и помочь вам составить такие последовательности для отображения:
fprintf,
printf,
спринт
vfprintf,
vprintf и
vsprintf.
Для этих функций строка формата - это
многобайтовая строка
что начинается и заканчивается в
начальное состояние переключения.
Функции широкоформатной печати (заявлено в
и, следовательно, добавлен с Поправка 1 )
преобразовать внутренние представления в последовательности типа wchar_t
, г.
и помочь вам составить такие последовательности для отображения:
fwprintf,
swprintf,
wprintf,
vfwprintf,
vswprintf и
vwprintf.Для этих функций строка формата - это
строка расширенных символов.
В нижеследующих описаниях широкий символ wc
из строки формата или потока сравнивается с конкретным (байтом)
символ c
как если бы вычисляя выражение wctob (туалет) == c
.
Строка формата имеет то же синтаксис как для функций печати, так и для функции сканирования, как показано на схеме.
Строка формата состоит из нуля или более
Характеристики преобразования с вкраплениями буквального текста и пустое пространство .Пробел - это последовательность из одного или нескольких
символы c
для которых звонок isspace (c)
возвращает ненулевое значение.
(Символы, обозначенные как пробелы, могут измениться при изменении LC_CTYPE
категория локали.)
Для функций печати спецификация преобразования является одним из спецификации преобразования печати описаны ниже.
Функция печати сканирует строку формата один раз с начала.
до конца, чтобы определить, какие преобразования выполнять. Каждый отпечаток
функция принимает
различное количество
аргументов, либо напрямую, либо под управлением аргумента типа va_list
.Некоторые спецификации преобразования печати
в строке формата используйте следующий аргумент в списке.
Функция печати использует каждый последующий аргумент не более чем
однажды. Завершающие аргументы можно не использовать.
В следующем описании:
Для функций печати, буквального текста или пустое пространство в формате строка генерирует символы, которые соответствуют символам в формате нить. А Спецификация преобразования печати обычно генерирует символы путем преобразования следующего значения аргумента в соответствующую текстовую последовательность.Спецификация преобразования печати имеет формат:
.Жирный шрифт указывает на функцию, добавленную с помощью C99.
После символа процента ( %
)
в строке формата вы можете написать ноль или более флаги формата :
-
-
- для выравнивания преобразования по левому краю -
+
- для создания знака плюса для значений со знаком, которые положительные -
пространство
- для создания пространства -
#
- к префиксу0
при преобразованиив
, для префикса0x
при преобразованииx
, для префикса0X
при преобразованииX
, или для создания десятичной запятой и дроби цифры, которые в противном случае подавляются при преобразовании с плавающей запятой -
0
- дополнить преобразование ведущими нулями после любой знак или префикс, при отсутствии минуса (-
) флаг формата или указанная точность
После любых флагов формата вы можете написать ширина поля что
указывает минимальное количество символов, которое нужно сгенерировать для преобразования.Если не изменено флагом формата,
по умолчанию выполняется короткое преобразование
слева с пробелами
знаков.
Если написать звездочку ( *
)
вместо десятичного числа для ширины поля печать
функция принимает значение следующего аргумента (который должен иметь тип int ) в качестве ширины поля. Если значение аргумента отрицательное,
он предоставляет флаг формата -
а его величина - ширина поля.
После любой ширины поля вы можете написать точку ( .
)
за которым следует точность который указывает одно из следующего:
минимальное количество цифр, генерируемых при преобразовании в целое число;
количество разрядов дробной части для генерации на e
, E
или f
преобразование;
максимальное количество значащих цифр для генерации
на преобразователе g
или G
; или максимальное количество
символов для создания из
Строка C
при преобразовании с
.
Если вы напишите *
вместо
десятичное число для точности,
функция печати принимает значение следующего аргумента (который должен
иметь тип int ) в качестве точности.Если значение аргумента
отрицательный, применяется точность по умолчанию. Если ты тоже не напишешь *
или десятичное число после точки, точность
равно нулю.
После любого точность, вы должны написать односимвольный спецификатор преобразования печати , возможно, перед ним стоит одно- или двухсимвольный квалификатор. Каждая комбинация определяет требуемый тип следующий аргумент (если есть) и как функции библиотеки изменяют аргумент значение перед преобразованием его в текстовую последовательность.Целое число и преобразования с плавающей запятой также определяют какую базу использовать для текстового представления. Если спецификатор преобразования требует точности p , и вы делаете не указывать один в формате, тогда спецификатор преобразования выбирает значение точности по умолчанию. Следующая таблица перечисляет все определенные комбинации и их свойства.
Преобразование Аргумент Преобразовано По умолчанию Pre- Спецификатор Тип Значение База cision % двойной x (двойной) x 10 6 добавлен с C99 % La long double x (long double) x 10 6 с добавлением C99 % Двойной x (двойной) x 10 6 добавлен с C99 % LA длинный двойной x (длинный двойной) x 10 6 с добавлением C99 % c int x (символ без знака) x % lc wint_t x wchar_t a [2] = {x} % d int x (число) x 10 1 % hd int x (короткий) x 10 1 % ld long x (длинный) x 10 1 % hhd int x (знаковый символ) x 10 1 добавлен с C99 % jd intmax_t x (intmax_t) x 10 1 добавлен с C99 % lld long long x (long long) x 10 1 с добавлением C99 % td ptrdiff_t x (ptrdiff_t) x 10 1 добавлен с C99 % zd size_t x (ptrdiff_t) x 10 1 добавлен с C99 % e двойной x (двойной) x 10 6 % Le длинный двойной x (длинный двойной) x 10 6 % E двойной x (двойной) x 10 6 % LE длинный двойной x (длинный двойной) x 10 6 % f двойной x (двойной) x 10 6 % Lf длинный двойной x (длинный двойной) x 10 6 % F double x (double) x 10 6 с добавлением C99 % LF длинный двойной x (длинный двойной) x 10 6 с добавлением C99 % г двойной x (двойной) x 10 6 % Lg длинный двойной x (длинный двойной) x 10 6 % G двойной x (двойной) x 10 6 % LG длинный двойной x (длинный двойной) x 10 6 % i int x (число) x 10 1 % hi int x (короткий) x 10 1 % li long x (длинный) x 10 1 % hhi int x (знаковый символ) x 10 1 добавлен с C99 % ji intmax_t x (intmax_t) x 10 1 добавлен с C99 % lli long long x (long long) x 10 1 с добавлением C99 % ti ptrdiff_t x (ptrdiff_t) x 10 1 добавлен с C99 % zi size_t x (ptrdiff_t) x 10 1 добавлен с C99 % n int * x % hn короткий * x % ln long * x % hhn int * x добавлено с C99 % jn intmax_t * x добавлен с C99 % lln long long * x добавлено с C99 % tn ptrdiff_t * x добавлен с C99 % zn size_t * x с добавлением C99 % o int x (целое число без знака) x 8 1 % ho int x (короткое без знака) x 8 1 % lo long x (длинное без знака) x 8 1 % hho int x (символ без знака) x 8 1 с добавлением C99 % jo intmax_t x (uintmax_t) x 8 1 добавлен с C99 % llo long long x (unsigned long long) x 8 1 с добавлением C99 % к ptrdiff_t x (size_t) x 8 1 добавлен с C99 % zo size_t x (size_t) x 8 1 добавлено с C99 % p недействительно * x (недействительно *) x % s char x [] x [0]... большой % ls wchar_t x [] x [0] ... большой % u int x (целое число без знака) x 10 1 % hu int x (короткое без знака) x 10 1 % lu long x (длинное без знака) x 10 1 % hhu int x (символ без знака) x 8 1 , добавленный с помощью C99 % ju intmax_t x (uintmax_t) x 8 1 добавлен с C99 % llu long long x (unsigned long long) x 8 1 добавлено с C99 % tu ptrdiff_t x (size_t) x 8 1 добавлен с C99 % zu size_t x (size_t) x 8 1 добавлено с C99 % x int x (целое число без знака) x 16 1 % hx int x (короткое без знака) x 16 1 % lx long x (длинное без знака) x 16 1 % hhx int x (символ без знака) x 8 1 с добавлением C99 % jx intmax_t x (uintmax_t) x 8 1 добавлен с C99 % llx long long x (unsigned long long) x 8 1 добавлен с C99 % tx ptrdiff_t x (size_t) x 8 1 добавлен с C99 % zx size_t x (size_t) x 8 1 добавлен с C99 % X int x (целое без знака) x 16 1 % hX int x (короткое без знака) x 16 1 % lX длинное x (длинное без знака) x 16 1 % hhX int x (символ без знака) x 8 1 с добавлением C99 % jX intmax_t x (uintmax_t) x 8 1 добавлен с C99 % llX long long x (unsigned long long) x 8 1 добавлен с C99 % tX ptrdiff_t x (size_t) x 8 1 добавлен с C99 % zX size_t x (size_t) x 8 1 добавлено с C99 %% нет '%'
Спецификатор преобразования печати определяет любое поведение, не описанное в обобщенном виде. в этой таблице.Для всех преобразований с плавающей запятой:
- Положительная бесконечность печатает как
inf
илиINF
. - Отрицательная бесконечность печатается как
-inf
или-INF
. - Not-a-number (NaN) печатает как
nan
илиNAN
.
Версия верхнего регистра печатается только для спецификатора преобразования верхнего регистра,
например % E
, но не % Lg
.
В следующих описаниях p - это точность.Примеры следуют за каждым из спецификаторов преобразования печати. Одно преобразование может генерировать до 509 символов.
Вы пишете %
или % A
для создания
знаковое шестнадцатеричное дробное представление с
десятичный показатель степени двойки. Сгенерированный текст принимает форму ± 0Xh.hhhP ± dd, , где ± - либо плюс, либо
знак минус, X равно x
(для % конверсия
)
или X
(для преобразования % A
), h - шестнадцатеричная цифра, d - десятичная цифра, шестнадцатеричная точка (.)
это десятичная точка для текущего
язык
и P равно p
(для % преобразование
)
или P
(для преобразования % A
).
Сгенерированный текст состоит из одной целой цифры
который равен нулю только для нулевого значения,
шестнадцатеричная точка, если присутствуют какие-либо цифры дробной части
или если вы укажете #
флаг формата, не более p цифр дробной части без завершающих нулей,
и по крайней мере одна цифра экспоненты без ведущих нулей.
Результат округлен.Нулевое значение имеет нулевую экспоненту.
printf ("% a", 30.0) генерирует, например 0x1ep + 1 printf ("%. 2A", 30.0) генерирует, например 0X1.E0P + 1
Пишете % c
для создания одного символа из преобразованного
ценить.
printf ("% c", 'a') генерирует printf ("<% 3c |% -3c>", 'a', 'b') генерирует
Для
широкий ручей,
преобразование символа х
происходит как бы при вызове btowc (x)
.
wprintf (L "% c", 'a') генерирует btowc (a)
Вы пишете % lc
для создания одного символа из преобразованного значения.
Преобразование символа х
происходит как если бы
за ним следует нулевой символ в массиве из двух элементов типа wchar_t
преобразовано по спецификации преобразования лс
.
printf ("% lc", L'a ') генерирует wprintf (L "lc", L'a ') генерирует L'a'
Вы пишете % d
, % я
, % о
, % и
, % x
, или % X
для создания
возможно целочисленное представление со знаком.% d
или % i
указывает десятичное представление со знаком, % или
беззнаковое восьмеричное, % и
беззнаковое десятичное, % x
беззнаковое шестнадцатеричное с использованием цифр 0-9
и a-f
, и % X
без знака
шестнадцатеричный с использованием цифр 0-9
и A-F
.
Преобразование генерирует не менее p цифр
для представления преобразованного значения. Если p равно нулю,
преобразованное значение нуля не генерирует никаких цифр.
printf ("% d% o% x", 31, 31, 31) генерирует 31 37 1f printf ("% hu", 0xffff) генерирует 65535 printf ("% # X% + d", 31, 31) генерирует 0X1F +31
Вы пишете % e
или % E
для создания
знаковое десятичное дробное представление с
десятичная степень десятичной экспоненты. Сгенерированный текст принимает форму ± d.dddE ± dd, где ± либо плюс, либо
знак минус, d - десятичная цифра, десятичная точка (.)
это десятичная точка для текущего
язык
и E равно e
(для преобразования % e
)
или E
(для преобразования % E
).
Сгенерированный текст состоит из одной целой цифры,
десятичная точка, если p не равно нулю или если вы указываете #
флаг формата, p цифр дробной части и не менее двух разрядов экспоненты.
Результат округлен. Нулевое значение имеет нулевую экспоненту.
printf ("% e", 31.4) генерирует 3.140000e + 01 printf ("%. 2E", 31.4) генерирует 3.14E + 01
Вы пишете % f
или % F
для генерации дробно-десятичного представления со знаком
без экспоненты. Сгенерированный текст имеет вид ± d.ddd, где ± - знак плюс или минус, d - десятичная цифра, а десятичная точка (. )
это десятичная точка для текущего
локаль.
Сгенерированный текст содержит как минимум одну целую цифру,
десятичная точка, если p не равно нулю или если вы укажете
флаг формата #
и p цифр дробной части.Результат округлен.
printf ("% f", 31.4) генерирует 31.400000 printf ("%. 0f% #. 0f", 31.0, 31.0) генерирует 31 31.
Вы пишете % g
или % G
для создания
знаковая десятичная дробная дробь
представление с десятичной степенью десятичной экспоненты или без нее, в зависимости от случая.
Для преобразования % g
сгенерированный текст
принимает ту же форму, что и % e
или % при конверсии
.Для преобразования % G
,
он принимает ту же форму, что и % E
или % F
конверсия.
Точность p определяет число
значащих цифр. (Если p равно нулю, он изменяется
до 1.) Если % e
преобразование даст показатель в диапазоне
[-4, p ), то вместо этого происходит преобразование % f
.
Сгенерированный текст не имеет завершающих нулей.
в любой дроби и имеет десятичную точку
только если есть ненулевые цифры дробной части, если вы не укажете #
флаг формата.
printf ("%. 6g", 31,4) генерирует 31,4 printf ("%. 1g", 31.4) генерирует 3.14e + 01
Вы пишете % n
для хранения количества сгенерированных символов
(до этого момента в формате) в целочисленном объекте
адрес которого является значением следующего последовательного аргумента.
printf ("abc% n", & x) магазина 3
Вы пишете % p
для создания внешнего представления указателя на void. Преобразование определяется реализацией.
printf ("% p", (void *) & x) генерирует, например F4C0
Вы пишете % s
для генерации последовательности символов из
значения, хранящиеся в аргументе
Строка C.
printf ("% s", "hello") генерирует привет printf ("%. 2s", "hello") генерирует he
Для
широкий поток, преобразование
происходит, как если бы при многократном звонке mbrtowc
,
начиная с начальное состояние преобразования.Преобразование генерирует не более p символов,
до завершающего нулевого символа, но не включая его.
wprintf (L "% s", "hello") генерирует привет
Вы пишете % ls
для генерации последовательности символов из
значения, хранящиеся в аргументе
строка расширенных символов.
Для байтового потока
преобразование происходит, как если бы при повторном вызове wcrtomb
, начиная с начальное состояние преобразования,
при условии, что могут быть сгенерированы полные многобайтовые символы.Конверсия генерирует не более p символов, до завершающего нуля, но не включая его
персонаж.
printf ("% ls", L "hello") генерирует привет wprintf (L "%. 2s", L "hello") генерирует he
Вы пишете %%
, чтобы сгенерировать
символ процента (%
).
printf ("%%") генерирует%
См. Также Содержание и Индекс .
Авторские права © 1989-2002 гг. Плаугера и Джима Броди. Все права защищены.
% | Буквальный символ процента. Никаких аргументов не требуется. |
б | Аргумент рассматривается как целое число и представляется как двоичное число. |
в | Аргумент рассматривается как целое число и представляется как символ с этим ASCII. |
д | Аргумент рассматривается как целое число и представляется как (знаковое) десятичное число. |
e | Аргумент рассматривается как научная запись (например, 1.2e + 2). |
E | Подобен спецификатору e , но использует
прописная буква (например, 1.2E + 2). |
f | Аргумент обрабатывается как число с плавающей запятой и представляется как число с плавающей запятой (с учетом региональных настроек). |
Факс | Аргумент обрабатывается как число с плавающей запятой и представляется как число с плавающей запятой (без учета региональных настроек). |
г | Общий формат. Пусть P равно точности, если она не равна нулю, 6, если точность опущена, или 1, если точность равна нулю. Затем, если преобразование со стилем E будет иметь показатель степени X: Если P> X ≥ −4, преобразование выполняется со стилем f и точностью P - (X + 1).В противном случае преобразование выполняется со стилем e и точностью P - 1. |
G | Подобен спецификатору g , но использует E и f . |
ч | Подобен спецификатору g , но использует F .
Доступно с PHP 8.0.0. |
H | Подобен спецификатору g , но использует E и F .Доступно с PHP 8.0.0. |
или | Аргумент рассматривается как целое число и представляется как восьмеричное число. |
с | Аргумент обрабатывается и представляется в виде строки. |
u | Аргумент рассматривается как целое число и представляется как десятичное число без знака. |
x | Аргумент рассматривается как целое число и представляется как шестнадцатеричное число (строчными буквами). |
х | Аргумент рассматривается как целое число и представляется как шестнадцатеричное число (с прописными буквами). |
Спецификаторы формата - Краткий справочник
Этот краткий справочник по форматной строке в StresStimulus составлен с использованием сообщений блога Ричарда Карра, опубликованных здесь: http: // www.blackwasp.co.uk/DotNetFormatting.aspxСпецификаторы числового формата
Полный список спецификаторов формата и влияние спецификатора точности для каждого из них выглядит следующим образом:
Спецификатор | Описание | Влияние спецификатора точности |
---|---|---|
C or c | Форматирует число как денежное значение, включая правильное количество десятичных знаков и соответствующий символ валюты для локальных настроек пользователя. | Задает фиксированное количество десятичных знаков. |
D или d | Форматирует целые числа только как простые целые числа. | Задает минимальное количество цифр. При необходимости добавляются ведущие нули. |
E | Форматирует числа с использованием экспоненциальной записи. Результирующая строка включает заглавную букву «E». | Задает фиксированное количество десятичных знаков для мантиссы. Если не указано, используются шесть десятичных знаков. |
e | Форматирует числа с использованием экспоненциальной записи.Результирующая строка включает строчную букву «е». | Задает фиксированное количество десятичных знаков для мантиссы. Если не указано, используются шесть десятичных знаков. |
F или F | Форматирует числа с использованием записи с фиксированной запятой. | Задает фиксированное количество десятичных знаков. |
G или g | Форматирует числа с использованием экспоненциальной записи или записи с фиксированной точкой, в зависимости от того, что дает самую короткую строку.Фактические результаты зависят от преобразуемого типа данных и от того, используется ли спецификатор точности. | См. «E», «E» и «F или f». |
N или n | Форматирует числа с использованием записи с фиксированной точкой и разделителями тысяч. | Задает фиксированное количество десятичных знаков. |
P или p | Форматирует числа с использованием процентной записи. Например, 0,25 форматируется как 25%. | Задает фиксированное количество десятичных знаков. |
R или R | Форматирует числа с использованием двустороннего формата . Это специальный формат, который гарантирует, что сгенерированная строка может быть преобразована обратно в исходное число с помощью методов анализа. | Не используется. |
х | Преобразует числа в строковое представление их шестнадцатеричного значения. Используются цифры от 0 до 9 и от A до F. | Задает минимальное количество цифр. При необходимости добавляются ведущие нули. |
x | Преобразует числа в строковое представление их шестнадцатеричного значения. Используются цифры от 0 до 9 и от a до f. | Задает минимальное количество цифр. При необходимости добавляются ведущие нули. |
Числовые форматы изображений для пользовательского форматирования
Спецификаторы стандартного формата полезны в большинстве ситуаций. Однако могут быть обстоятельства, при которых спецификаторы формата не обеспечивают желаемых результатов.В этих случаях вы можете использовать формат изображения . Формат изображения - это строка, содержащая специальные символы, влияющие на окончательное преобразование. Есть несколько управляющих символов; каждый будет рассмотрен в следующих разделах. Для получения дополнительной информации проверьте этот пост http://www.blackwasp.co.uk/CSharpNumericToString_2.asp
Спецификаторы формата даты и времени
Полный список спецификаторов формата для преобразования DateTime выглядит следующим образом:
Спецификатор | Описание | Пример |
---|---|---|
d | Краткий формат даты.Это эквивалентно использованию ToShortDateString. | "01.03.2007" |
D | Длинный формат даты. Это эквивалентно использованию ToLongDateString. | «03 января 2007 г.» |
f | Дата и время с использованием длинной даты и короткого формата времени. | "03 января 2007 г. 21:25" |
F | Дата и время в длинном формате даты и времени. | "03 января 2007 г. 21:25:30" |
г | Дата и время в кратком формате даты и времени. | "01.03.2007 21:25" |
G | Дата и время в коротком и долгом формате даты. | "01.03.2007 21:25:30" |
м | Только день и месяц. | «03 января» |
r | Дата и время в стандартном формате времени по Гринвичу (GMT). | "Ср, 3 января 2007 г., 21:25:30 GMT" |
с | Сортируемый формат даты и времени.Элементы даты начинаются с наивысшей величины (года) и уменьшаются вдоль строки до наименьшей величины (секунды). | "2007-01-03T21: 25: 30" |
т | Краткий формат времени. Это эквивалентно использованию ToShortTimeString. | "21:25" |
т | Длинный формат времени. Это эквивалентно использованию ToLongTimeString. | "21:25:30" |
u | Короткий формат, всемирное координированное время с возможностью сортировки. | "2007-01-03 21: 25: 30Z" |
U | Дата и время в длинном формате. | "03 января 2007 г. 17:25:30" |
y | Только месяц и год. | "Январь 2007 г." |
Коды форматирования изображений DateTime
Спецификаторы стандартного формата полезны в большинстве случаев. Однако в некоторых случаях необходимо иметь полный контроль над расположением и стилем каждого элемента информации о дате и времени.Для этого вы можете использовать форматов изображений , что позволяет создать точный формат с использованием любой комбинации элементов из DateTime
.В приведенном выше примере показаны несколько форматов и результаты. Полный список кодов форматирования выглядит следующим образом:
Спецификатор | Описание | Примеры |
---|---|---|
y | Год, состоящий из одной цифры. Если год нельзя указать одной цифрой, автоматически используются две цифры. | "7" «95» |
гг | Год из двух цифр с ведущими нулями, если требуется. | "07" |
гггг | Полный год из четырех цифр. | "2007" |
г или | г.Индикатор Anno Domini (AD). | "A.D." |
M | Однозначный номер месяца. Если месяц нельзя указать одной цифрой, автоматически используются две цифры. | "1" «12» |
мм | Двухзначный номер месяца с ведущими нулями, если требуется. | "01" |
МММ | Трехбуквенное сокращение месяца. | «Янв» |
ММММ | Название месяца. | "Январь" |
г | Однозначный номер дня. Если день не может быть указан одной цифрой, автоматически используются две цифры. | "3" «31» |
dd | Двузначный номер дня с ведущими нулями, если требуется. | "03" |
ddd | Трехбуквенное сокращенное название дня недели. | «СР» |
дддд | Название дня. | «Среда» |
ч | Однозначный час в двенадцатичасовом формате. Если час не может быть указан одной цифрой, автоматически используются две цифры. | "9" «12» |
чч | Двухзначный час в двенадцатичасовом формате с ведущими нулями, если требуется. | "09" |
H | Час с одной цифрой в 24-часовом формате. Если час не может быть указан одной цифрой, автоматически используются две цифры. | "1" «21» |
HH | Час с двумя цифрами в формате двадцати четырех часов с ведущими нулями, если требуется. | "09" |
т | Однобуквенный индикатор AM или PM, как правило, для использования с двенадцатичасовыми значениями часов. | "А" «П» |
тт | Двухбуквенный индикатор AM или PM, как правило, для использования с двенадцатью часовыми значениями часов. | "AM" «ПМ» |
м | Минуты с одной цифрой. Если минуту нельзя указать одной цифрой, автоматически используются две цифры. | "1" «15» |
мм | Минуты из двух цифр с ведущими нулями, если требуется. | "01" |
с | Однозначная секунда. Если вторую нельзя указать одной цифрой, автоматически используются две цифры. | "1" «59» |
н.с. | Секунда из двух цифр с ведущими нулями, если требуется. | "01" |
f | Доля секунды.Можно включить до семи f, чтобы определить количество отображаемых десятичных знаков. | "0" «0000000» |
z | Однозначное смещение часового пояса, указывающее разницу в часах между местным временем и временем UTC. Если смещение нельзя указать одной цифрой, автоматически используются две цифры. | "+6" «-1» |
zz | Двухзначное смещение часового пояса, указывающее разницу в часах между местным временем и временем UTC с ведущими нулями, если требуется. | "+06" |
zzz | Полное смещение часового пояса, указывающее разницу в часах и минутах между местным временем и временем UTC с ведущими нулями, если требуется. | "+06: 00" |
В некоторых кодах форматирования используется та же буква, что и в описателе формата. При использовании в строке формата, длина которой превышает один символ, это не представляет проблемы. Если вам нужно использовать односимвольную строку формата изображения, перед буквой должен стоять знак процента (%), чтобы указать, что спецификатор стандартного формата не должен использоваться.
Указатели формата направляющих
Четыре доступных спецификатора формата перечислены в таблице ниже.
Спецификация | Описание | Примеры |
---|---|---|
D | Формат по умолчанию из тридцати двух цифр с группами, разделенными дефисами. | "00000000-0000-0000-0000-000000000000" |
N | Серия из тридцати двух шестнадцатеричных цифр без разделителей между группами. | «00000000000000000000000000000000» |
B | Формат по умолчанию в скобках. | "{00000000-0000-0000-0000-000000000000}" |
п. Оставить комментарий
|