Язык программирования Си. Издание 3-е, исправленное - Брайан Керниган
- Дата:01.10.2024
- Категория: Компьютеры и Интернет / Программирование
- Название: Язык программирования Си. Издание 3-е, исправленное
- Автор: Брайан Керниган
- Просмотров:0
- Комментариев:0
Шрифт:
Интервал:
Закладка:
Символы-спецификаторы и разъяснение их смысла приведены в таблице B-1. Если за % нет правильного символа-спецификатора, результат не определен.
int printf(const char *format, ...);
printf(...) полностью эквивалентна fprintf(stdout, ...).
int sprintf(char *s, const char *format, ...)
sprintf действует так же, как и printf, только вывод осуществляет в строку s, завершая ее символом ' '. Строка s должна быть достаточно большой, чтобы вмещать результат вывода. Возвращает количество записанных символов, в число которых символ ' ' не входит.
int vprintf (const char *format, va_list arg)
int vfprintf (FILE *stream, const char *format, va_list arg)
int vsprintf (char *s, const char *format, va_list arg)
Функции vprintf, vfprintf и vsprintf эквивалентны соответствующим printf- функциям с той лишь разницей, что переменный список аргументов представлен параметром arg, инициализированным макросом va_start и, возможно, вызовами va_arg (см. в B7 описание <stdarg.h>).
Таблица B-1. Преобразования printf
Символ Тип аргумента; вид печати d, i int; знаковая десятичная запись o unsigned int; беззнаковая восьмеричная запись (без 0 слева) x, X unsigned int; беззнаковая шестнадцатеричная запись (без 0x или 0X слева), в качестве цифр от 10 до 15 используются abcdef для x и ABCDEF для X u unsigned int; беззнаковое десятичное целое c int; единичный символ после преобразования в unsigned char s char *; символы строки печатаются, пока не встретится ' ' или не исчерпается количество символов, указанное точностью f double; десятичная запись вида [-]mmm.ddd, где количество d специфицируется точностью. По умолчанию точность равна 6; нулевая точность подавляет печать десятичной точки e, E double; десятичная запись вида [-]m.dddddde±xx или запись вида [-]m.ddddddE±xx, где количество d специфицируется точностью. По умолчанию точность равна 6; нулевая точность подавляет печать десятичной точки g, G double; используется %e и %E, если порядок меньше -4 или больше или равен точности; в противном случае используется %f. Завершающие нули и точка в конце не печатаются p void *; печатает в виде указателя (представление зависит от реализации n int *; число символов, напечатанных к данному моменту данным вызовом printf, записывается в аргумент. Никакие другие аргументы не преобразуются % никакие аргументы не преобразуются; печатается %B1.3. Форматный ввод
Функции scanf имеют дело с форматным преобразованием при вводе
int fscanf(FILE *stream, const char *format, ...);
fscanf читает данные из потока stream под управлением format и преобразованные величины присваивает по порядку аргументам, каждый из которых должен быть указателем. Завершает работу, если исчерпался формат. Выдает EOF по исчерпании файла или перед любым преобразованием, если возникла ошибка; в остальных случаях функция возвращает количество преобразованных и введенных элементов.
Форматная строка обычно содержит спецификации преобразования, которые используются для управления вводом. В форматную строку могут входить:
• пробелы и табуляции, которые игнорируются;
• обычные символы (кроме %), которые ожидаются в потоке ввода среди символов, отличных от символов-разделителей;
• спецификации преобразования, состоящие из %; необязательного знака *, подавляющего присваивание; необязательного числа, специфицирующего максимальную ширину поля; необязательных h, l или L, указывающих размер присваиваемого значения, и символа-спецификатора преобразования.
Спецификация преобразования определяет преобразование следующего поля ввода. Обычно результат размещается в переменной, на которую указывает соответствующий аргумент. Однако если присваивание подавляется с помощью знака *, как, например, в %*s, то поле ввода просто пропускается, и никакого присваивания не происходят. Поле ввода определяется как строка символов, отличных от символов-разделителей; при этом ввод строки прекращается при выполнении любого из двух условий: если встретился символ-разделитель или если ширина поля (в случае, когда она указана) исчерпана. Из этого следует, что при переходе к следующему полю scanf может "перешагивать" через границы строк, поскольку символ новой строки является символом-разделителем. (Под символами-разделителями понимаются символы пробела, табуляции, новой строки, возврата каретки, вертикальной табуляции и смены страницы.)
Символ-спецификатор указывает на способ интерпретации поля ввода. Соответствующий аргумент должен быть указателем. Список допустимых символов-спецификаторов приводится в таблице B-2.
Символам-спецификаторам d, i, n, o, u и x может предшествовать h, если аргумент есть указатель на short (а не int) или l (буква ell), если аргумент есть указатель на long. Символам-спецификаторам e, f и g может предшествовать l, если аргумент - указатель на double (а не float), или L, если аргумент - указатель на long double.
int scanf (const char *format, ...);
scanf(...) делает то же, что и fscanf(stdin, ...).
int sscanf (const char *s, const char *format, ...);
sscanf(s, ...) делает то же, что и scanf(...), только ввод символов осуществляет из строки s.
Таблица B-2. Преобразования scanf
Символ Данные на вводе; тип аргумента d десятичное целое; int * i целое: int *. Целое может быть восьмеричным (с нулем слева) или шестнадцатеричным (с 0x или 0X слева) o восьмеричное целое (с нулем слева или без него); int * u беззнаковое десятичное целое; unsigned int * x шестнадцатеричное целое (с 0x или 0X слева или без них): int * c символы, char *. Символы ввода размещаются в указанном массиве в количестве, заданном шириной поля; по умолчанию это количество равно 1. Символ' ' не добавляется. Символы-разделители здесь рассматриваются как обычные символы и поступают в аргумент. Чтобы прочесть следующий символ-разделитель, используйте %1s s строка символов, отличных от символов-разделителей (записывается без кавычек); char *, указывающий на массив размера достаточного, чтобы вместить строку и добавляемый к ней символ ' ' e, f, g число с плавающей точкой; float *. Формат ввода для float состоит из необязательного знака, строки цифр, возможно с десятичной точкой, и необязательного порядка, состоящего из E или e и целого, возможно со знаком p значение указателя в виде, в котором printf ("%р") его напечатает; void * n записывает в аргумент число символов, прочитанных к этому моменту в этом вызове; int *. Никакого чтения ввода не происходит. Счетчик числа введенных элементов не увеличивается [...] выбирает из ввода самую длинную непустую строку, состоящую из символов, заданных в квадратных скобках: char *. В конец строки добавляется ' '. Спецификатор вида []...] включает ] в задаваемое множество символов [^...] выбирает из ввода самую длинную непустую строку, состоящую из символов, не входящих в заданное в скобках множество. В конец добавляется ' '. Спецификатор вида [^]...] включает ] в задаваемое множество символов % обычный символ %; присваивание не делаетсяB1.4. Функции ввода-вывода символов
- Язык программирования C++. Пятое издание - Стенли Липпман - Программирование
- Вопросы истории: UNIX, Linux, BSD и другие - Федорчук Алексей Викторович "alv" - Прочая околокомпьтерная литература
- Принципы назначения наказания - Самир Велиев - Юриспруденция
- Литература и революция. Печатается по изд. 1923 г. - Лев Троцкий - Публицистика
- Неизвестная революция 1917-1921 - Всеволод Волин - История