Форматный ввод-вывод (Мини-учебник с ejudge = Чернокнижка), страница 2
Описание файла
Файл "Форматный ввод-вывод" внутри архива находится в папке "Мини-учебник с ejudge = Чернокнижка". PDF-файл из архива "Мини-учебник с ejudge = Чернокнижка", который расположен в категории "". Всё это находится в предмете "практика расчётов на пэвм" из 3 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .
Просмотр PDF-файла онлайн
Текст 2 страницы из PDF
Спецификаторы используются для генерации текстового представления знакового вещественного числа с показательной частью. Мантисса и показательзаписываются в шестнадцатеричной системе счисления. Сгенерированный текст имеет вид±0X h.h p P ± hq , где X — это буква x для преобразования %a и буква X для преобразования%A; h — шестнадцатеричная цифра 0—9 или a—f для преобразования %a или шестнадцатеричная цифра 0—9, A—F для преобразования %A; P — это буква p для преобразования %a ибуква P для преобразования %A.
Сгенерированный текст содержит одну шестнадцатеричнуюцифру, точку, затем p шестнадцатеричных цифр дробной части, причём точность по умолчанию достаточна для точного представления числа по основанию 2, если оно существует,либо достаточно велико, чтобы представить все биты числа типа double (long double,если указан квалификатор L). Шестнадцатеричная цифра перед точкой неопределена, есличисло ненормализовано, и не равна нулю, если число нормализовано.Результат преобразованияОператорprintf("%a\n", 0.0);0x0p+0printf("%a\n", 16.125);0x1.02p+4printf("%A\n", 1.45e+13);0X1.A6016B2DP+43printf("%La\n", -0.1L);-0xc.ccccccccccccccdp-7printf("%a\n", 1.0);0x1p+0Спецификатор %n.
Спецификатор используется, чтобы сохранить количество сгенерированных символов к тому месту, где в строке формата указан данный спецификатор. Значением следующего аргумента функции форматного преобразования должен быть адрес переменной соответствующего типа.Сохранённое в x значе- Результат преобразоваОператорниенияprintf("123%n4", &x); 31234Спецификатор %p. Спецификатор используется для генерации внешнего представлениянетипизированного указателя (типа void*). Выполняемое преобразование зависит от реализации.ОператорРезультат преобразования (пример)printf("%p\n", (void*) &x); 0xbffffa94Спецификатор %s.
Спецификатор используется для генерации последовательностисимволов из значений, хранящихся в строке-аргументе функции. Преобразование генерирует не более чем p символов до символа конца строки ’\0’, не включая его. Символ концастроки не учитывается при подсчёте количества генерируемых символов.ОператорРезультат преобразованияprintf("%s", "hello");helloprintf("%.2s", "hello");heprintf("%.10s", "hello");helloprintf("<%-7s>", "hello");<hello >printf("%2s", "hello");helloprintf("<%7.2s>\n", "hello");<he>Спецификатор %%. Спецификатор используется для генерации знака процента (%).6Операторprintf("%%");Результат преобразования%1.2 Функции печати#include <stdio.h>intintintintprintf(const char *format, ...);fprintf(FILE *stream, const char *format, ...);sprintf(char *str, const char *format, ...);snprintf(char *str, size_t size, const char *format, ...);#include <stdarg.h>intintintintvprintf(const char *format, va_list ap);vfprintf(FILE *stream, const char *format, va_list ap);vsprintf(char *str, const char *format, va_list ap);vsnprintf(char *str,size_t size, const char *format, va_list ap);Функции форматного вывода форматируют выходной текст в соответствии с описанным выше форматом.
Функции printf и vprintf выводят на стандартный поток вывода, fprintf и vfprintf выводят в заданный дескриптор потока, sprintf, snprintf,vsprintf, vsnprintf выводят в символьную строку str.Функции vprintf, vfprintf, vsprintf, vsnprintf эквивалентны функциямprintf, fprintf, sprintf, snprintf соответственно, за исключением того, что онивызываются с параметром va_list (список аргументов) вместо переменного количествааргументов. Данные функции не вызывают макрос va_end, значение ap после вызованеопределено.
Вызывающая функция сама должна вызвать макрос va_end(ap).Функции возвращают количество напечатанных символов (не считая завершающий’\0’, используемый при выводе в строки). snprintf и vsnprintf не записывают болеечем size байт (включая завершающий ’\0’). Даже в случае, когда места в строке оказалось недостаточно, функции snprintf и vsnprintf возвращают количество символов(не считая ’\0’, которое было бы записано, если бы строка имела достаточный размер.Для функций snprintf и vsnprintf допускается указывать параметр size, равный0, и параметр str, равный NULL. В этом случае функции возвращают длину строки, котораяполучилась бы при данном форматном выводе.1.3 Строка формата функций сканированияДля функций сканирования литеральный текст в форматной строке должен соответствовать следующим символам во входном тексте.
Пробельные символы в форматной строкедолжны соответствовать последовательности максимальной длины из нуля или более пробельных символов во входном тексте. Все спецификаторы преобразования, кроме n (который не использует входной текст) определяют шаблон, которому должны соответствоватьодин или более следующих символов во входном тексте. Работа каждого спецификаторапреобразования, кроме c, n и [ начинается с пропуска пробельных символов во входномтексте.Функция сканирования завершает работу при следующих условиях:• она достигает конца форматной строки;7• она не может получить очередной символ входного текста (ошибка ввода);• преобразование заканчивается неудачей (ошибка сопоставления).Функция сканирования возвращает EOF (определённый в <stdio.h>), если ошибкаввода происходит до первого преобразования.
В противном случае функция возвращает количество считанных значений. Если один или несколько символов образуют допустимыйпрефикс, но преобразование завершается неуспешно, допустимый префикс прочитываетсядо завершения функции сканирования и не возвращается обратно в поток.
Например,scanf("%i", &i)scanf("%f", &f)прочитывает 0X из поля 0XZпрочитывает 3.2E из поля 3.2EZСпецификация преобразования, как правило, конвертирует символы входного потока,удовлетворяющие формату спецификации, в соответствующее внутреннее представление.Соответствующим параметром функции сканирования при этом должен быть адрес объектасоответствующего типа. Преобразование конвертирует текстуальное представление значения во внутреннее и сохраняет его в указанном объекте. На рис.
2 показана синтаксическаядиаграмма спецификаций преобразования функций сканирования.scanf_format :h l L0−9c f n u d g j x e G p X E i s %*[^]any char except ], 0]Рис. 2: Синтаксис спецификаций преобразования функции scanf (C90)Флаги. После знака процента % может следовать знак *, означающий, что последующийспецификатор преобразования не должен сохранять преобразованное значение.Ширина поля. После флагов может идти спецификация ширины поля, которая определяет максимальное количество входных символов, которые будут использоваться в преобразовании, не учитывая пробельных символов, которые могут быть пропущены согласноспецификации преобразования перед этим.Спецификатор преобразования.
За шириной поля должен следовать спецификаторпреобразования: либо односимвольный код, либо множество сканирования, перед которымможет быть указан одно- или двухсимвольный квалификатор преобразования. Каждый спецификатор преобразования определяет тип требуемого аргумента функции сканирования ито, как функция сканирования интерпретирует текстовую последовательность и преобразовывает её во внутренний формат. Целочисленные и вещественные преобразования такжеопределяют, какая библиотечная функция будет вызвана для выполнения преобразования, икакое основание системы счисления подразумевается для текстового представления.
Основание системы счисления — это аргумент base функций strtol, strtoul. В таблице 3перечислены все определённые стандартом комбинации и их свойства.В описании спецификатора преобразования или множества сканирования определено егоповедение, не отражённое в таблице. В примерах, которые приводятся после описания каждого спецификатора преобразования, функция sscanf использует для форматного преобразования только подчёркнутые символы.Спецификатор %c. Спецификатор преобразования %c используется для записи входныхсимволов в массив элементов типа char. Если ширина поля ввода w не задана, используется8Спецификаторdhdhhdldllde, E, f, g, Gle,lE,lf,lg,lGLe,LE,Lf,Lg,LGihihhilillinhnhhnlnllnohohholollouhuhhulullux, Xhx, hXhhx, hhXlx, lXllx, llXpcs[...]%Тип аргументаint *xshort *xsigned char *xlong *xlong long *xfloatdoublelong doubleint *xshort *xsigned char *xlong *xlong long *xint *xshort *xsigned char *xlong *xlong long *xunsigned int *xunsigned short *xunsigned char *xunsigned long *xunsigned long long *xunsigned int *xunsigned short *xunsigned char *xunsigned long *xunsigned long long *xunsigned int *xunsigned short *xunsigned char *xunsigned long *xunsigned long long *xvoid **xchar c[]char x[]char x[]нетФункция преобразованияstrtolstrtolstrtolstrtolstrtollstrtodstrtodstrtoldstrtolstrtolstrtolstrtolstrtollstrtoulstrtoulstrtoulstrtoulstrtoullstrtoulstrtoulstrtoulstrtoulstrtoullstrtoulstrtoulstrtoulstrtoulstrtoullТаблица 3: Спецификаторы преобразования функции scanf9Основание1010101010101010000008888810101010101616161616значение по умолчанию w = 1.