русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

PRINTF.


Дата добавления: 2014-11-28; просмотров: 754; Нарушение авторских прав


printf,fprintf - вывод с преобразованием по формату

 

СИНТАКСИС:

include <stdio.h>

int printf (format, val ...)

char *format;

int fprintf (stream, format, val ...)

FILE *stream;

char *format;

ОПИСАНИЕ:

Функция printf направляет данные в стандартный поток вывода stdin. Функция fprintf направляет данные в поток вывода, заданный аргументом stream.

Функции преобразуют, форматируют и печатают выводимые значения val под управлением формата, заданного аргументом format. Формат - это цепочка символов, содержащая объекты двух категорий: обычные символы, которые просто копируются в выходной поток, и спецификаторы преобразований, каждому из которых соответствует одно, несколько или ни одного из выводимых значений. Если выводимых значений val недостаточно, результат непредсказуем; если их слишком много, избыточные игнорируются.

Каждый спецификатор преобразования начинается символом %, после которого последовательно записываются:

Флаги (один, несколько или ни одного), которые уточняют смысл спецификации преобразования.

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

Точность, задающая минимальное количество цифр в изображении результата преобразования типа d, i, o, u, x, X, количество цифр после десятичной точки в изображении результата преобразования типа e, E, f, максимальное количество значащих цифр в изображении результата преобразования типа g, G, или максимальное количество символов в изображении результата преобразования типа s. Точность записывается в виде точки (.), за которой следует несколько десятичных цифр; отсутствие цифр интерпретируется как ноль. Дополнение результата символами, обусловленное точностью, подавляет дополнение, обусловленное шириной поля.



Необязательный символ l, означающий, что относящиеся к нему преобразования d, i, o, u, x, X применяются к целым выводимым значениям типа long. Для остальных преобразований символ l игнорируется.

Символ, обозначающий тип преобразования.

Вместо последовательности цифр ширину поля и точность можно обозначить звездочкой. Это означает, что в качестве ширины поля (или точности) используется целое значение val из списка аргументов; оно должно предшествовать соответствующему выводимому значению. Если значение, задающее ширину поля, отрицательно, то считается, что задан флаг -, а в качестве ширины поля берется абсолютная величина значения. Если отрицательно значение, задающее точность, она принимается равной нулю.

Флаги и их смысл:

- Выравнивание результата преобразования по левой границе.
+ Обязательное изображение знака (для чисел со знаком).
пробел Если первый символ результата преобразования со знаком отличен от + и -, то изображение результата предваряется пробелом. Тем самым флаг + аннулирует действие флага пробел.
# Этот флаг означает, что значение преобразуется к "альтернативной форме". Для преобразований c, d, i, s, u этот флаг не имеет значения. Для преобразования типа o результат изображается с увеличенной точностью, с тем, чтобы первая цифра результата была нулем. Для преобразований типа x, X ненулевой результат будет изображаться с префиксом 0x или 0X. Для преобразований типа e, E, f, g, G результат обязательно изобразится с десятичной точкой, даже если за ней нет цифр (обычно точка в этом случае опускается). Для преобразований g, G не подавляются незначащие хвостовые нули (что обычно делается).

Символы, обозначающие тип преобразования, и их смысл:

d, i, o, u, x, X Целое выводимое значение преобразуется в десятичное со знаком (d, i), беззнаковое восьмеричное (o), десятичное (u) или шестнадцатеричное (x, X); буквы abcdef изображают шестнадцатеричные цифры при преобразовании x, а ABCDEF - при преобразовании X. Точность задает минимальное количество цифр в изображении результата; если результат можно изобразить меньшим количеством цифр, то слева добавляются незначащие нули. Значение точности по умолчанию равно 1. Результат преобразования нуля с нулевой точностью - пустая цепочка.
f Выводимое значение типов float или double преобразуется в десятичное число и изображается в виде [-]ddd.ddd, где число цифр после точки определяется точностью. Если точность опущена, то считается, что она равна 6; если точность равна нулю, точка не печатается.
e, E Выводимое значение типов float или double преобразуется в десятичное число и изображается в виде [-]d.ddde+/-dd, где перед точкой находится ровно одна цифра, а число цифр после точки определяется точностью; по умолчанию точность равна 6; если точность равна нулю, точка не печатается. Спецификация E отличается от e только обозначением порядка (E вместо e). Порядок всегда содержит, по крайней мере, две цифры.
g, G Выводимое значение типов float или double преобразуется в десятичное число и изображается либо в формате f, либо в формате e (или E, если задана спецификация G); точность определяется числом значащих цифр. Вид изображения зависит от значения аргумента: вид e используется только в том случае, если порядок меньше -4 или больше значения точности. Хвостовые незначащие нули подавляются; десятичная точка печатается, только если за ней есть цифры.
c Печатается значение-символ.
s Выводимое значение, заданное указателем, рассматривается как цепочка символов, ограниченная пустым символом (\0); печать цепочки прекращается либо по ограничителю, либо после вывода количества символов, равного значению точности. По умолчанию точность считается бесконечно большой; в этом случае цепочка печатается до тех пор, пока не встретится ограничитель. Пустой указатель (NULL) дает непредсказуемые результаты.
% Печать символа %; выводимых значений не требуется.

Если порядок вещественного числа точкой равен 0x7FF, то число изображается в виде

[-]NaN0xdddddddd

где 0xdddddddd - шестнадцатеричное представление старших 32 бит мантиссы.

Изображение результата никогда не усекается до заданной ширины поля; если результат не помещается в поле, то оно расширяется до требуемой величины.

SCANF.

scanf, fscanf - ввод с преобразованием по формату

 

СИНТАКСИС:

include <stdio.h>

int scanf (format [, pointer] ...)

char *format;

int fscanf (stream, format [, pointer] ...)

FILE *stream;

char *format;

 

ОПИСАНИЕ

Функция scanf читает данные из стандартного потока ввода stdin. Функция fscanf читает данные из потока ввода, заданного аргументом stream. Каждая из перечисленных функций вводит символы, интерпретирует их в соответствии с форматом и записывает по указанным адресам. Аргументами функций являются: format - формат, управляющий преобразованием, и pointers - указатели на области памяти, куда следует помещать результаты преобразований. Если для заданного формата не хватает указателей, результат непредсказуем; если же указателей слишком много, лишние просто игнорируются.

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

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

Обычный символ (не %), который должен совпадать со следующим символом потока ввода.

Спецификаторы преобразований, состоящие из символа %, необязательного символа подавления присваивания *, необязательного числа, задающего максимальную ширину поля в потоке ввода, необязательного символа l или h, указывающего размер переменной, получающей значение, а также кода преобразования.

Спецификатор задает способ преобразования текущего входного поля; результат присваивается переменной, на которую указывает соответствующий аргумент pointer, если не задано подавление присваивания. Подавление присваивания позволяет пропускать в потоке ввода отдельные поля. Поле в потоке ввода определяется как последовательность символов, не содержащая пробелов, которая либо ограничивается "неуместным" (в данном контексте) символом, либо определяется шириной, если она задана. Для всех преобразований, кроме [ и c, пробелы в начале поля игнорируются.

Код преобразования определяет способ интерпретации входного поля; соответствующий аргумент-указатель, как правило, должен иметь соответствующий тип. Для пропускаемых полей указатель не задается.

Распознаются следующие коды преобразований:

% Из потока ввода должен быть прочитан единственный символ %; никаких присваиваний не выполняется.
d Из потока ввода должно быть прочитано целое десятичное число; соответствующий аргумент должен быть указателем на целое.
u Из потока ввода должно быть прочитано целое десятичное без знака; соответствующий аргумент должен быть указателем на целое без знака.
o Из потока ввода должно быть прочитано целое восьмеричное число; соответствующий аргумент должен быть указателем на целое.
x Из потока ввода должно быть прочитано целое шестнадцатеричное число; соответствующий аргумент должен быть указателем на целое.
i Из потока ввода должно быть прочитано целое число; соответствующий аргумент должен быть указателем на целое. Значение числа вычисляется в соответствии с соглашениями языка C: префикс 0 обозначает восьмеричное число, префикс 0x - шестнадцатеричное, отсутствие префикса - десятичное.
n Общее количество символов (включая пробельные), прочитанных с начала выполнения функции, запоминается в очередной переменной из списка аргументов. Из потока ввода ничего не читается.
e, f, g Из потока ввода должно быть прочитано число с плавающей точкой; оно представляет собой последовательность цифр с необязательным знаком, необязательной десятичной точкой и необязательным порядком; порядок обозначается буквой e или E, за которой может следовать +, - или пробел, а затем - целое число. Соответствующий аргумент должен быть указателем на переменную типа float.
s Из потока ввода должна быть прочитана цепочка символов; соответствующий аргумент должен быть указателем на символьный массив достаточной длины, чтобы в нем поместились вводимые данные с завершающим пустым символом \0, который добавляется автоматически. Признак конца входного поля - пробельный символ.
c Из потока ввода должен быть прочитан единственный символ; соответствующий аргумент должен быть указателем на символ. Обычный пропуск пробельных символов в этом случае не производится; для чтения ближайшего не пробельного символа нужно задать спецификатор %1s. Если задана ширина поля, то соответствующий аргумент должен указывать на символьный массив, в этом случае вводится заданное количество символов.
[ Входные данные обрабатываются особым образом. За открывающей скобкой следует ряд символов, которые называются шаблоном сканирования, а затем закрывающая скобка; входное поле представляет собой максимальный участок потока ввода, состоящий исключительно из символов шаблона. Если первым символом шаблона является ^, это означает, что входное поле представляет собой максимальный участок потока ввода, содержащий любые символы кроме перечисленных в шаблоне. Шаблон сканирования записывается по определенным правилам. Несколько символов можно задать конструкцией первый - последний; таким образом, ряд [0123456789] можно изобразить как [0-9]. При использовании этого правила первый должен быть лексикографически меньше или равен последнему, иначе минус рассматривается как обычный символ шаблона. Минус рассматривается как обычный символ, если он находится на первом или на последнем месте в шаблоне. Если в шаблон нужно включить закрывающую скобку, то она должна быть самым первым символом шаблона (возможно, с предшествующим ^), в противном случае она рассматривается как ограничитель шаблона. Соответствующий этому спецификатору аргумент должен быть указателем на символьный массив достаточной длины, способный вместить читаемые данные вместе с ограничителем \0, добавляемым автоматически. Это преобразование считается завершившимся успешно, если из потока ввода выбран хотя бы один символ, соответствующий шаблону.

Кодам преобразований d, u, o, x, i может предшествовать символ l или h, означающий, что соответствующий аргумент указывает на переменную типа long или short, а не int. Аналогично, кодам e, f, g может предшествовать символ l, означающий, что соответствующий аргумент указывает на переменную типа double, а не float. Для остальных кодов преобразований модификаторы l и h игнорируются.

Функция scanf завершается по концу файла, при исчерпании формата или при обнаружении в потоке ввода символа, противоречащего формату. В последнем случае символ-нарушитель остается непрочитанным в потоке ввода.

Функция scanf возвращает число успешно введенных и преобразованных величин; это число может оказаться нулем, если слишком рано обнаружилось несоответствие с форматом. Если ввод закончился без конфликтов и преобразований, результат равен EOF.

 



<== предыдущая лекция | следующая лекция ==>
Основные команды системы UNIX | Файловая система


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 1.925 сек.