Описание функций Си

         

Parsfnm



     parsfnm

Функция Выделяет имя файла.

Синтаксис #include

char *parsfnm(const char * cmdline, struct fcb *fcb, int opt);

Файл, содержащий dos.h прототип

Описание Функция parsfnm выделяет из строки символов (обычно командной строки) с адресным указателем cmdline имя файла. Имя файла помещается в блок FCB как имя устройства, имя файла и расширение имени файла. Указателем на блок FCB является ука- затель fcbptr. Параметр opt представляет собой значение, переда- ваемое в регистре AL, при вызове соответствующей функции DOS, выделяющий имя файла. Смотрите "Справочное руководство программиста по DOS", в котором вы можете найти подробное описание сис- темного вызова 0x29, выполняющего вышеописанные действия.

Возвращаемое При успешном завершении функция parsfnm возвращает значение указатель на байт, следующий за концом имени фай- ла. Если при выполнении функции произошла какая- либо ошибка, функция возвращает значение 0.

Переносимость Функция уникальна для DOS.

Пример:

#include

#include

#include

#include

int main(void) { char line[80]; struct fcb blk; /* получить имя файла */ printf("Введите имя устройства и файл (без маршрута, т.е.\ a:filename.ext)\n"); gets(line); /* поместить имя файла в FCB (Блок управления файлом) */ if(parsfnm(line,&blk,1) == NULL) printf("Ошибка при вызове parsfnm.\n"); else printf("Устройство: #%d Имя: %11s\n",blk.fcb_drive, blk.fcb_name); return 0; }



Peek



     peek

Функция Возвращает содержимое слова памяти с адресом segment:offset.

Синтаксис #include



int peek(unsigned segment, unsigned offset);

Файл, содержащий dos.h прототип

Описание Функция peek возвращает содержимое слова памяти, по адресу segment:offset.

Если функция вызывается при подключенном файле dos.h, она трактуются, как макрокоманда, которая расширяется до встроенного кода. Если же вы не подключаете файл dos.h (или вы выполнили для дан- ной функции директиву #undef), вы будете иметь функцию, а не макрокоманду.

Возвращаемое Функция peek возвращает значение, хранящееся по значение адресу segment:offset.

Переносимость Функция уникальна для семейства микропроцессоров 8086.

Смотрите также

Пример:

#include

#include

#include

int main(void) { int value = 0; printf("Статус клавиатуры:\n"); value = peek(0x0040,0x0017); if(value & 1) printf("Rigth Shift on\n"); else printf("Rigth Shift off\n"); if(value & 2) printf("Left Shift on\n"); else printf("Left Shift off\n"); if(value & 4) printf("Control key on\n"); else printf("Control key off\n"); if(value & 8) printf("Alt key on\n"); else printf("Alt key off\n"); if(value & 16) printf("Scroll lock on\n"); else printf("Scroll lock off\n"); if(value & 32) printf("Num lock on\n"); else printf("Num lock off\n"); if(value & 64) printf("Caps lock on\n"); else printf("Caps lock off\n"); return 0; }



Peekb



     peekb

Функция Функция peekb извлекает из памяти байт, записанный по адресу segment:offset.

Синтаксис #include

char peekb( unsigned segment, unsigned offset);

Файл, содержащий dos.h прототип

Описание Функция peekb извлекает из памяти байт, записанный по адресу segment:offset

Если функция вызывается при подключенном файле dos.h, она трактуются, как макрокоманда, которая расширяется до встроенного кода. Если же вы не подключаете файл dos.h (или вы выполнили для дан- ной функции директиву #undef), вы будете иметь функции, а не макрокоманды.

Возвращаемое Функция peekb возвращает значение байта с адресом значение segment:offset.

Переносимость Функция уникальна для семейства микропроцессоров 8086.

Смотрите также

Пример:

#include

#include

#include

int main(void) { int value = 0; printf("Статус клавиатуры:\n"); value = peekb(0x0040,0x0017); if(value & 1) printf("Rigth Shift on\n"); else printf("Rigth Shift off\n"); if(value & 2) printf("Left Shift on\n"); else printf("Left Shift off\n"); if(value & 4) printf("Control key on\n"); else printf("Control key off\n"); if(value & 8) printf("Alt key on\n"); else printf("Alt key off\n"); if(value & 16) printf("Scroll lock on\n"); else printf("Scroll lock off\n"); if(value & 32) printf("Num lock on\n"); else printf("Num lock off\n"); if(value & 64) printf("Caps lock on\n"); else printf("Caps lock off\n"); return 0; }



Perror



     perror

Функция Печатает системные сообщения об ошибках.

Синтаксис #include

void perror (const char *s);

Файл, содержащий stdio.h прототип

Описание Функция perror выводит сообщение об ошибке, произшедшей в библиотечной функции, в поток stderr (обычно на консоль).

Сначала выводится аргумент s, затем двоеточие, затем сообщение об ошибке, соответствующее теку- щему значению глобальной переменной errno, и в конце - символ перехода на новую строку. По соглащению в качестве аргумента функции пере- дается имя файла.

Для обеспечения лучшего контроля за форматирова- нием сообщений, массив сообщений об ошибках, со- держится в массиве sys_errlist. Соответственно, переменная errno может быть использована в качес- тве индекса в этом массиве, чтобы корректно выде- лить строку, содержащую сообщение с данным номе- ром. Такая строка - элемент массива - не включает в себя символ перехода на новую строку.

Параметр sys_nerr содержит число элементов масси- ва.

В главе 2 "Переменные" вы найдете подробную ин- формацию о переменных errno, sys_errlist, sys_nerr.

Возвращаемое Нет. значение

Переносимость Функция поддерживаются на системах UNIX и стандар- том ANSI C.

Смотрите также

Пример:

#include

int main(void) { FILE *fp; fp = fopen("perror.dat","r"); if(!fp) perror("Не могу открыть файл для чтения.\n"); return 0; }



Pieslice



     pieslice

Функция Рисует и закрашивает сектор круга.

Синтаксис #include

void far pieslice(int x,int y,int stangle, int endangle,int radius);

Файл, содержащий graphics.h прототип

Описание pieslice рисует и закрашивает сектор круга с центром в точке (x,y) и радиусом radius. Сектор рисуется от угла stangle до угла endangle. Сектор вычерчивается текущим цветом и закрашивается те- кущим цветом закраски с помощью текущего шаблона.

Угол для pieslice измеряется в градусах и отсчи- тывается против часовой стрелки, где 0 градусов соответствует 3 часам на циферблате, 90 градусов - 12 часам и т.д.

Замечание. Если вы используете CGA или монохром- ный адаптер, примеры на использование графических функций, приведенные в этой книге, могут не дать ожидаемого результата. Если ваша система работает на CGA или монохромном адаптере, используйте зна- чение 1 вместо символической константы цвета.

Смотрите второй приведенный пример на использова- ние функций pieslice,приведенный в разделе функ- ции arc. (В функции arc приведен только один при- мер, повидимому это опечатка. Прим. пер.)

Возвращаемое Нет. значение

Переносимость Эта функция уникальна для Turbo C++. Она работа- ет только на компьютерах IBM PC и совместимых с ними, оснащенных дисплейными адаптерами, поддер- живающими графический режим.

Смотрите также перечисляемый тип),

Пример:

#include

#include

#include

#include

int main(void) { /* Запрос автоопределения */ int graphdriver = DETECT, gmode, errorcode; int midx,midy; int stangle = 45,endangle = 135; int radius = 100;

/* инициализация графики и локальных переменных */

initgraph(&graphdriver,&gmode,"");

/* получение результата инициализации */ errorcode = graphresult(); if(errorcode != grOk) /* если ошибка */ { printf("Ошибка :%s\n",grapherrormsg(errorcode)); printf("Для останова нажмите любую клавишу\n"); getch(); exit(1); /* завершение с кодом ошибки */ } midx = getmaxx() / 2; midy = getmaxy() / 2; /* определить тип закраски и нарисовать сектор */ setfillstyle(EMPTY_FILL,getmaxcolor()); pieslice(midx,midy,stangle,endangle,radius);

/* очистка */ getch(); closegraph(); return 0; }



Poke



     poke

Функция Записывает значение в память по адресу segment:offset.

Синтаксис void poke(unsigned segment, unsigned offset, int value);

Файл, содержащий dos.h прототип

Описание Функция poke записывает целое значение value в память по адресу segment:offset, где segment - адрес сегмента, offset- смещение.

Если функция вызывается при подключенном файле dos.h, она трактуются, как макрокоманда, которая расширяется до встроенного кода. Если же вы не подключаете файл dos.h (или вы выполнили для дан- ной функции директиву #undef), вы будете иметь функцию, а не макрокоманды.

Возвращаемое Нет. значение

Переносимость Функция уникальна для семейства микропроцессоров 8086.

Смотрите также

Пример:

#include

#include

int main(void) { clrscr(); cprintf("Убедитесь, что Scroll lock выключена, и нажмите\ любую клавишу...\n"); getch(); poke(0x0000,0x417,16); cprintf("Теперь Scroll lock включена. \n"); return 0; }



Pokeb



     pokeb

Функция Помещает заданный байт в память по адресу segment:offset.

Синтаксис #include

void pokeb(unsigned segment, unsigned offset, char value);

Файл, содержащий dos.h прототип

Описание Функция pokeb записывает значение байта value в память по адресу segment:offset, где segment - адрес сегмента, offset- смещение.

Если функция вызывается при подключенном файле dos.h, она трактуются, как макрокоманда, которая расширяется до встроенного кода. Если же вы не подключаете файл dos.h (или выполните для данной функции директиву #undef), вы будете иметь функ- цию, а не макрокоманду.

Возвращаемое Нет. значение

Переносимость Функция уникальна для семейства микропроцессоров 8086.

Смотрите также

Пример:

#include

#include

int main(void) { clrscr(); cprintf("Убедитесь, что Scroll lock выключена, и нажмите\ любую клавишу...\n"); getch(); pokeb(0x0000,0x417,16); cprintf("Теперь Scroll lock включена. \n"); return 0; }



Polar



     polar

Функция Возвращает комплексное число в соответствии с ве- личиной и углом.

Синтаксис #include

complex polar(double mag, double angle);

Файл, содержащий complex.h прототип

Описание polar(mag,angle) аналогично выражению: complex(mag*cos(angle),mag*sin(amgle)).

Возвращаемое Комплексное число, для данного абсолютного значе- значение ния и угла.

Переносимость Комплексные функции требуют С++, и поэтому непере- носимы. Смотрите также

Пример:

#include

#include

int main(void) { double x = 3.1, y = 4.2; complex z = complex(x,y); cout



Poly



     poly

Функция Конструирует из заданных аргументов полином.

Синтаксис #include

double poly(double x, int degree, double coeff[]);

Файл, содержащий math.h прототип

Описание Функция poly конструирует полином от x степени degree с коэффициентами coeff[0], coeff[1], ...coeff[n]. Например, если n=4, сконструирован- ный полином будет выглядеть следующим образом:

coeff[4]x^4 + coeff[3]x^3 + coeff[2]x^2 + coeff[1]x + coeff[0]

Возвращаемое Функция poly возвращает вычисленное для данного x значение значение полинома.

Переносимость Функция поддерживается на системах UNIX.

Пример:

#include

#include

/* полином: x**3 - 2*x**2 + 5*x - 1 */

int main(void) { double array[] = {-1.0,5.0,-2.0,1.0}; double result; result = poly(2.0,3,array); printf("Полином x**3-2*x**2+5*x-1 при x=2.0 равен: %lf\n", result); return 0; }



Pow



     pow

Функция Вычисляет x в степени y.

Синтаксис Вещественная версия #include

double pow(double x, double y);

Комплексная версия #include

complex pow(complex x,complex y); complex pow(complex x,double y); complex pow(double x,complex y);

Файл, содержащий Вещественная версия Комплексная версия прототип math.h complex.h

Описание pow вычисляет x^y.

Комплексная версия определена следующим образом:

pow(base,expon) = exp(expon log(base))

Возвращаемое При успешном завершении, pow возвращает вычислен- значение ное значение, x^y.

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

ERANGE - Результат выходит за пределы.

Если аргумент x меньше или равен 0, и y не равен 0, то при этом errno присваивается значение

EDOM - Ошибка области определения.

и функция возвращает значение обратное HUGE_VAL.

Если и x и y равны 0, то pow возвращает 1.

Обработку ошибок функции pow можно изменить с по- мощью функции matherr.

Переносимость Вещественная версия pow доступна в системах UNIX и поддерживантся стандартом ANSI C. Комплексная версия требует С++ и поэтому скорее всего непере- носима.

Смотрите также 0,

Пример:

#include

#include

int main(void) { double x = 4.0,y=3.0; printf("%lf в степени %lf = %1f\n",x,y,pow(x,y)); return 0; }



Возвращаемое При успешном завершении pow10



     pow10

Функция Вычисляет 10 в степени p.

Синтаксис #include

double pow10(int p);

Файл, содержащий math.h прототип

Описание pow10 вычисляет 10^p.

Возвращаемое При успешном завершении pow10 возвращает вычислен- значение ное значение 10^p.

Результат вычисляется в виде double. Все аргумен- ты считаются допустимыми, даже, если вызывают пе- реполнение.

Переносимость Доступна в системах UNIX.

Смотрите также

Пример:

#include

#include

int main(void) { int p=3; /* !!! в оригинале double p = 3.0; прим. пер. */ printf("10 в степени %d = %1f\n",p,pow10(p)); return 0; }


Printf



     printf

Функция Производит форматированный вывод в stdout.

Синтаксис #include

int printf(const char *format [,argument, ...]);

Файл, содержащий stdio.h прототип

Описание printf получает набор аргументов, применяет к каж- дому соответствующую спецификацию формата из строки format, и выводит форматированные данные в stdout. Число аргументов должно соответствовать числу спецификаций формата в format.

Строка формата.

Строка формата, представленная в каждом вызове функций семейства ...printf, управляет тем, как каждая из функций будет преобразовывать, формати- ровать и печатать свои аргументы. Для формата должно быть достаточно аргументов, иначе резуль- таты могут быть непредвиденными, и, скорее всего, неверными. Лишние аргументы (если их количество больше, чем требуется в формате) будут игнориро- ваться.

Строка формата - это символьная строка, состоящая из двух типов объектов - просто символы и специ- фикации преобразования.

- Простые символы переносятся в вывод без измене- ний.

- Спецификации преобразования применяются для форматирования.

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

Спецификации формата для функций семейства ... printf имеют следующую форму:

%[флаги] [ширина] [.точность] [F|N|h|l|L] type Каждая спецификация начинается с символа процента (%). После процента следуют признаки в порядке:

- необязательная последовательность [flags] сим- волов-флагов;

- необязательная спецификация [width] ширины;

- необязательная спецификация [.prec] точности;

- необязательный модификатор [F|N|h|l|L] входного размера;

- символ типа преобразования [type].

Необязательные компоненты строки формата.

Далее описаны основные правила управления форма- том, включая необязательные символы, спецификации и модификации для форматной строки.

-----------------T--------------------------------------------------- Символ или ¦ Как они управляют форматом спецификация ¦ -----------------+--------------------------------------------------- flags (флажки) ¦ выравнивание вывода, знак числа, десятичная ¦ точка, хвостовые нули, восьмеричные и десятичные ¦ префиксы. ¦ width (ширина) ¦ максимальное число печатаемых символов, включая ¦ пробелы и нули. ¦ precision ¦ максимальное число печатаемых символов; для целых (точность) ¦ чисел максимальное число цифр. ¦ size (размер) ¦ отвергает размер аргумента по умолчанию ¦ (N- ближний указатель, F- дальний указатель, ¦ h- короткое целое, l- длинное целое, L - long ¦ double). -----------------+---------------------------------------------------


Символы преобразования для семейства функций ...printf.

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

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

--------------T------------T----------------------------------------- Символ ¦ Входной ¦ Выходной аргумент преобразования¦ аргумент ¦ --------------+------------+----------------------------------------- числовые данные --------------T------------T----------------------------------------- d ¦ целое ¦ целое десятичное со знаком i ¦ целое ¦ целое десятичное со знаком o ¦ целое ¦ целое восьмеричное без знака u ¦ целое ¦ целое десятичное без знака x ¦ целое ¦ целое шестнадцатеричное без знака ¦ ¦ (с буквами a, b, c, d, e, f) X ¦ целое ¦ целое шестнадцатеричное без знака ¦ ¦ (с буквами A, B, C, D, E, F). f ¦с плавающей ¦ значение со знаком в форме [-]dddd. ¦ точкой ¦ dddd e ¦с плавающей ¦ значение со знаком в форме [-]d.dddd ¦ точкой ¦ e[+/-]ddd g ¦с плавающей ¦ значение со знаком либо в форме f, либо ¦ точкой ¦ в форме e, с данным значением и точнос- ¦ ¦ тью. Хвостовые нули и десятичная точка ¦ ¦ печатаются только при необходимости E ¦с плавающей ¦ так же, как в случае e, только с буквой ¦ точкой ¦ E для обозначения степени G ¦с плавающей ¦ так же, как в случае g, только с буквой ¦ точкой ¦ E для обозначения степени --------------+------------+----------------------------------------- Символьные данные. --------------T------------T----------------------------------------- C ¦ символьное ¦ один символ S ¦ указатель ¦ печатает символы до тех пор, пока не ¦ на строку ¦ встретится нулевое окончание, либо не ¦ ¦ будет достигнута точность. % ¦ нет символа¦ печатается только знак %. --------------+------------+----------------------------------------- Указатели --------------T------------T----------------------------------------- n ¦ указатель ¦ сохраняется (по адресу, указанному во ¦ на целое ¦ входном аргументе) кол-во только что за- ¦ ¦ писанных символов. P ¦ указатель ¦ печатает входной аргумент,как указатель; ¦ ¦ дальние указатели печатаются, как ¦ ¦ XXXX:YYYY, ближние указатели печатаются, ¦ ¦ как YYYY (только смещение). --------------+------------+-----------------------------------------



Соглашения.

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

------------T-------------------------------------------------------- Символы ¦ Соглашения ------------+-------------------------------------------------------- e или E ¦ аргумент преобразуется в соответствии с шаблоном: ¦ [-]d.ddd...e[+/-]ddd, где ¦ - одна цифра предшествует десятичной точке; ¦ - число цифр после десятичной точки равно точности; ¦ - степень всегда содержит три цифры. f ¦ аргумент преобразуется в десятичную форму в соответст- ¦ вии с шаблоном [-]ddd.ddd..., где число десятичных ¦ цифр после запятой равно точности (если дана ненулевая ¦ точность). g или G ¦ аргумент печатается по принципу e, E или f, с точнос- ¦ тью, обозначающей число значащих цифр. ¦ Хвостовые нули удаляются, десятичная точка ставится ¦ только при необходимости. ¦ аргумент печатается по принципу e или f (с некоторыми ¦ ограничениями), если символ преобразования g; и по ¦ принципу E, если символ преобразования G. ¦ Принцип e используется только в том случае, если экспо- ¦ нента, полученная в результате либо а) больше, чем точ- ¦ ность; б) меньше чем -4. x или X ¦ Для преобразований типа x - в выводе будут буквы a, b, ¦ c, d, e. ¦ Для преобразований типа X - в выводе будут буквы A, B, ¦ C, D, E. ------------+---------------------------------------------------------

Замечание. Неопределенные значения с плавающей точкой печатаются как +INF или -INF. Не числа по IEEE печатаются как +NAN или -NAN.

Символы - флаги.

Символы - флажки это минус(-), плюс(+), диез(#) и пусто( ); Они могут появляться в любом порядке и комбинации.

-----------T--------------------------------------------------------- Флаг ¦ Что это означает -----------+--------------------------------------------------------- - ¦ Левое выравнивание результата, пробелы остаются справа. ¦ Если не задан, результат выравнивается справа, заполня- ¦ ется пробелами или нулями слева. + ¦ Знаковое преобразование - результат всегда начинается со ¦ знака (+) или (-). пусто ¦ Если значение неотрицательно, вывод начинается с пробе- ¦ ла вместо плюса; отрицательные значения всегда начина- ¦ ются со знака минус. # ¦ Специфицирует, что преобразуемый аргумент используется в ¦ "альтернативной" форме. Смотрите следующую таблицу. -----------+---------------------------------------------------------



Примечание. Знак плюс имеет приоритет над пробе- лом в обоих случаях.

Альтернативная форма.

Если флаг # используется вместе с символом преоб- разования, при конвертировании аргумента (arg) это даст следующий результат:

------------------T-------------------------------------------------- Символ ¦ Как # влияет на результат преобразования ¦ ------------------+-------------------------------------------------- c, s, d, i, u ¦ Не оказывает влияния. 0 ¦ 0 предшествует ненулевому arg x или X ¦ 0x (или 0X) предшествует arg e, E или f ¦ Результат всегда будет содержать десятичную точ- ¦ ку, даже если за точкой не следует никаких цифр. ¦ Обычно, десятичная точка появляется в результате, ¦ только если за ней следует цифра. g или G ¦ Аналогично e или E, с дополнением, что хвостовые ¦ нули не удаляются. ------------------+--------------------------------------------------

Спецификация ширины.

Спецификация ширины устанавливает минимальную ши- рину поля для выводимого значения.

Ширина задается одним из двух способов:

- непосредственно, с помощью строки десятичных цифр;

- или косвенно с помощью знаков (*).

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

--------------T------------------------------------------------------ Спецификация ¦ Как это влияет на ширину вывода ширины ¦ --------------+------------------------------------------------------ n ¦ Печатаются по крайней мере n символов. Если выводи- ¦ мое значение меньше, чем n символов, вывод заполня- ¦ ется пробелами (выравнивание справа, если задан флаг ¦ "-", в противном случае - левое выравнивание). 0n ¦ Печатается по крайней мере n символов. Если выводное ¦ значение содержит менее n символов, оно заполняется ¦ слева нулями. * ¦ Спецификация ширины ставится в списке аргументов ¦ перед соответствующим аргументом. --------------+------------------------------------------------------



Спецификация точности.

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

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

---------------T----------------------------------------------------- Спецификация ¦ Как это влияет на вывод точности ¦ ---------------+----------------------------------------------------- (не дана) ¦ Точность устанавливается по умолчанию (стандартно ¦ =1 для типов d, i, o, u, x, X; ¦ =6 для типов e, E, f; ¦ = все значащие цифры для типов g, G; ¦ = печать первого нулевого символа для типа S; ¦ не влияет на тип c) .0 ¦ Для типов d, i, o, u, x точность устанавливается по ¦ умолчанию. ¦ Для типов e, E, f десятичная точка не печатается. .n ¦ Печатаются n символов или n десятичных знаков; если ¦ выводимое значение содержит больше n символов, оно ¦ может быть усечено или округлено. (Случится это или ¦ нет, зависит от символьного типа). * ¦ Спецификация точности задается в списке аргументов, ¦ причем она предшествует значению форматируемого ар- ¦ гумента. ---------------+-----------------------------------------------------

Замечание. Если указана нулевая точность, и спецификатор формата для целого значения (т.е. d, i, o, u, x), и печатаемое значение равно 0, то в этом случае не будут выводится цифровые символы, т.е. поле бу- дет пустое.

---------------T----------------------------------------------------- Символ ¦ Как спецификация точности влияет на преобразование преобразования ¦ ---------------+----------------------------------------------------- d ¦ .n показывает, что будет напечатано по крайней мере i ¦ n цифр. Если выводимый аргумент имеет менее n цифр, o ¦ свободные места в выводе забиваются слева нулями. u ¦ Если же выводимый аргумент имеет больше n цифр, вы- x ¦ ходное значение не усекается. X ¦ ¦ e ¦ .n показывает, что после десятичной точки будет на- E ¦ печатано n символов, причем последняя цифра округ- f ¦ ляется. ¦ g ¦ .n определяет, что будет напечатано максимально n ¦ значащих цифр. G ¦ ¦ c ¦ .n не имеет влияния на вывод ¦ s ¦ .n определяет, что будет напечатано не больше, чем ¦ n символов. ---------------+-----------------------------------------------------



Модификатор входного размера.

Символ - модификатор входного размера (F, N, h, l или L) дает размер последующего входного аргумен- та:

F = дальний указатель; N = ближний указатель; h = короткое целое; l = длинное целое; L = длинное двойной точности;

Модификаторы входного размера (F, N, h, l и L) влияют на то, каким образом функции ...printf ин- терпретируют тип данных соответствующего входного аргумента arg. Модификаторы F и N применяются только к тем входным аргументам arg, которые представляют собой указатели (%p, %s и %n). Моди- фикаторы h, l и L применяются к числовым аргумен- там (целые и с плавающей точкой).

Оба модификатора F и N интерпретируют входной ар- гумент arg. Обычно, для преобразований %p, %s, или %n аргумент arg - это указатель стандартного размера для соответствующей модели памяти. F оз- начает: "интерпретировать arg, как дальний указа- тель". N означает: "интепретировать arg, как ближний указатель".

Модификаторы h, l и L отвергают стандартный раз- мер числовых данных входных аргументов: l и L применяется к целым типам данных (d, i, o, u, x, X) и типам данных с плавающей точкой (e, E, f, g и G), в то время как h применяется только к целым данным. Ни h, ни l- модификаторы не оказывают ни- какого влияния на типы символов(c,s) или указате- лей(p,n).

------------------T-------------------------------------------------- Модификаторы ¦ Как интерпретируется аргумент входного размера ¦ ------------------+-------------------------------------------------- F ¦ аргумент arg читается, как дальний указатель. N ¦ аргумент arg читается, как ближний указатель. ¦ в сверх-больших моделях памяти N не может ис- ¦ пользоваться ни с каким типом преобразований. h ¦ для типов преобразований d, i, o, u, x, X аргумент ¦ arg интерпретируется, как короткое целое; l ¦ для типов преобразований d, i, o, u, x, X аргумент ¦ интерпретируется, как длинное целое; ¦ для типов преобразований e, E, f, g, G аргумент ин- ¦ терпретируется как число двойной точности. L ¦ интерпретирует arg как длинное с двойной точ- ¦ ность для типов преобразований e, E, f, g, G. ------------------+--------------------------------------------------

Возвращаемое Каждая функция возвращает количество выводимых значение байт. В случае ошибки printf возвращает EOF.

Переносимость printf поддерживается на системах UNIX и определена в стандарте Кернигана и Ритчи. Поддерживается стандартом ANSI C.

Смотрите также

Пример:

#define I 555 #define R 5.5

int main(void) { int i, j, k, l; char buf[7]; char *prefix = &buf; char tp[20]; printf("prefix 6d 6o 8x 10.2e 10.2f\n"); strcpy(prefix, "%"); for (i=0; i


Putc



     putc

Функция Выводит символ в поток.

Синтаксис #include

int putc(int c, FILE *stream);

Файл, содержащий stdio.h прототип

Описание Функция putc представляет собой макрокоманду, ко- торая выводит символ c в указанный выходной поток stream.

Возвращаемое При успешном завершении функция putc, возвращают значение символ c. При возникновении ошибки функция возвращают значение EOF.

Переносимость Функция поддерживается в системах UNIX и стандар- том ANSI C. Функция putc определены в стандарте Кернигана и Ритчи.

Смотрите также

Пример:

#include

int main(void) { char msg[] = "Hello world"; int i=0; while(msg[i]) putc(msg[i++],stdout); return 0; }



Putch



     putch

Функция Выводит символ на экран.

Синтаксис #include

int putch(int c);

Файл, содержащий conio.h прототип

Описание putch выводит символ c в текущее текстовое окно. Эта функция производит вывод в текстовом режиме непосредственно на консоль. putch не преобразует символ перевода строки (\n) в пару: перевод строки, возврат каретки.

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

Возвращаемое При успешном завершении putch возвращает выведен- значение ный символ c. При ошибке он возвращает EOF.

Переносимость putch работает только на компьютерах совместимых с IBM PC.

Смотрите также

Пример:

#include

#include

int main(void) { char ch = 0; printf("Введите строку:"); while(ch != '\r') { ch = getch(); putch(ch); } return 0; }



Putchar



     putchar

Функция Выводит символ в поток stdout.

Синтаксис #include

int putchar(int c);

Файл, содержащий stdio.h прототип

Описание putchar это макрокоманда, определенная как putc(ch,stdout);

Возвращаемое При успешном завершении putchar возвращает выведен- значение ный символ c. При ошибке он возвращает EOF.

Переносимость putchar доступна в системах UNIX и поддерживается стандартом ANSI C. Определена также у Кернигана и Ричи.

Смотрите также

Пример:

#include

/* определение некоторых символов, предназначенных для рисования рамок */ #define LEFT_TOP 0xDA #define RIGHT_TOP 0xBF #define HORIZ 0xC4 #define VERT 0xB3 #define LEFT_BOT 0xC0 #define RIGHT_BOT 0xD9

int main(void) { char i,j; /* нарисовать верхнюю часть рамки */ putch(LEFT_TOP); for(i=0;i



Putenv



     putenv

Функция Добавляет строку символов в текущее описание среды.

Синтаксис #include

int putenv(const char *name);

Файл, содержащий stdlib.h прототип

Описание putenv получает строку name и добавляет ее к опи- санию среды текущего процесса. Например:

putenv("PATH=C:\\TC");

putenv можно также использовать для модификации или удаления уже существующих переменных среды текущего процесса. Для удаления надо просто доба- вить пустую переменную (к примеру "MYVAR=").

putenv изменяет среду только текущего процесса. При завершении процесса восстанавливается исход- ная среда.

Замечание. Строка, передоваемая putenv должна быть глобальной или статической. В случае, если строка была локальной или динамической, то осво- бождение памяти приведет к непредсказуемому ре- зультату.

Возвращаемое При успешном завершении putenv возвращает 0, при значение ошибке -1.

Переносимость putenv доступна в системах UNIX.

Смотрите также

Пример:

#include

#include

#include

#include

#include

int main(void) { char *path, *ptr; int i=0; /* получить значение переменной среды PATH */ ptr = getenv("PATH"); /* создать новое значение */ path = malloc(strlen(ptr)+15); strcpy(path,"PATH="); strcat(path,ptr); strcat(path,";c:\\temp"); /* занести его в переменную */ putenv(path); while(environ[i]) printf("%s\n",environ[i++]); return 0; }



Putimage



     putimage

Функция Выводит на экран битовый образ.

Синтаксис #include

void far putimage(int left,int top, void far *bitmap,int op);

Файл, содержащий graphics.h прототип

Описание putimage помещает битовый образ, ранее со- храненный с помощью getimage, обратно на экран, где левый верхний угол образа находится в точке (left,top). bitmap указывает область памяти в ко- тором хранится требуемый образ.

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

Перечень значений putimage_op (как определено в graphics.h) дает названия следующим операциям:

------------------------------------------- ИМЯ ЗНАЧ. ОПИСАНИЕ ------------------------------------------- COPY_PUT 0 копия XOR_PUT 1 исключающее "или" OR_PUT 2 "или" AND_PUT 3 " и " NOT_PUT 4 копия источника с инверсией -------------------------------------------

Другими словами, COPY_PUT скопирует побитный об- раз источника на экран, XOR_PUT выполнит операцию ИСКЛЮЧАЮЩЕЕ ИЛИ над уже находящемся на экране об- разом, OR_PUT выполнит операцию ИЛИ над уже нахо- дящемся на экране образом и т.д.

Возвращаемое Нет. значение

Переносимость Функция уникальна для Turbo C++. Она работает только на компьютерах IBM PC и совместимых с ни- ми, оснащенных дисплейными адаптерами, поддержи- вающими графический режим.

Смотрите также

Пример:

#include

#include

#include

#include

#define ARROW_SIZE 10

void draw_arrow(int x,int y);

int main(void) { int graphdriver = DETECT, gmode, errorcode; void *arrow; int x,y,maxx; unsigned int size;

/* инициализация драйвера и локальных переменных */ initgraph(&graphdriver,&gmode,"");

/* получение результата инициализации */ errorcode = graphresult(); if(errorcode != grOk) /* если ошибка */ { printf("Ошибка :%s\n",grapherrormsg(errorcode)); printf("Для останова нажмите любую клавишу\n"); getch(); exit(1); /* завершение с кодом ошибки */ } maxx = getmaxx(); x = 0; y = getmaxy()/2; /* нарисовать перемещаемый объект */ draw_arrow(x,y); /* определить размер памяти, для хранения изображения */ size = imagesize(x,y-ARROW_SIZE,x+(4*ARROW_SIZE),y+ARROW_SIZE); /* выделить память */ arrow = malloc(size); /* взять изображение */ getimage(x,y-ARROW_SIZE,x+(4*ARROW_SIZE),y+ARROW_SIZE,arrow); /* продолжать, пока не будет нажата клавиша */ while(!kbhit()) { /* стереть старый образ */ putimage(x,y-ARROW_SIZE,arrow,XOR_PUT); x += ARROW_SIZE; if(x >= maxx) x = 0; /* нарисовать изображение */ putimage(x,y-ARROW_SIZE,arrow,XOR_PUT); }

free(arrow); closegraph(); return 0; }

void draw_arrow(int x,int y) { /* нарисовать на экране стрелку */ moveto(x,y); linerel(4*ARROW_SIZE,0); linerel(-2*ARROW_SIZE,-1*ARROW_SIZE); linerel(0,2*ARROW_SIZE); linerel(2*ARROW_SIZE,-1*ARROW_SIZE); }



Putpixel



     putpixel

Функция выводит пиксель в заданную точку экрана.

Синтаксис #include

void far putpixel(int x, int y,int color);

Файл, содержащий graphics.h прототип

Описание putpixel отображает точку цвета color и с координатами (x,y).

Возвращаемое Нет. значение

Переносимость Функция уникальна для Turbo C++. Она работает только на компьютерах IBM PC и совместимых с ни- ми, оснащенных дисплейными адаптерами, поддержи- вающими графический режим.

Смотрите также

Пример:

#include

#include

#include

#include

#include

#define PIXEL_COUNT 1000 #define DELAY_TIME 100 /* в миллисекундах */

int main(void) { /* Запрос автоопределения */ int graphdriver = DETECT, gmode, errorcode; int x,y,i,color,maxx,maxy,maxcolor,seed;

/* инициализация графики и локальных переменных */ initgraph(&graphdriver,&gmode,"");

/* получение результата инициализации */ errorcode = graphresult(); if(errorcode != grOk) /* если ошибка */ { printf("Ошибка :%s\n",grapherrormsg(errorcode)); printf("Для останова нажмите любую клавишу\n"); getch(); exit(1); /* завершение с кодом ошибки */ } maxx = getmaxx(); maxy = getmaxy(); maxcolor = getmaxcolor()+1; while(!kbhit()) { /* сбросить генератор случайных чисел */ seed = random(32767); srand(seed); for(i=0;i



Puts



     puts

Функция Выводит строку в поток stdout.

Синтаксис #include

int puts(const char *s);

Файл, содержащий stdio.h прототип

Описание Функция puts копирует строку символов с нулевым окончанием в стандартный выходной поток stdout, причем добавляет в конец символ перехода на новую строку.

Возвращаемое При успешном завершении, функция puts ненулевое значение значение. В противном случае возвращается EOF.

Переносимость Данная функция поддерживается на системах UNIX и стандартом ANSI C.

Смотрите также



Puttext



     puttext

Функция Копирует текст из памяти на экран, в текстовом ре- жиме.

Синтаксис #include

int puttext(int left, int top, int right, int bottom, void *source);

Фйал, содержащий conio.h прототип

Описание puttext помещает содержимое области памяти, адре- суемой параметром source, в прямоугольник на эк- ране, определяемый параметрами left, top, right, bottom.

Все координаты являются абсолютными координатами экрана, а не текстового окна. Левый верхний угол экрана имеет координаты (1,1).

puttext размещает на экране содержимое памяти последовательно, слева на право и сверху вниз.

puttext работает в текстовом режиме и производит непосредственный вывод на экран.

Возвращаемое При успешном завершении puttext возвращает ненуле- значение вое значение. При ошибке (к примеру, если указан- ные координаты лежат вне пределов экрана для дан- ного режима) puttext возвращает 0.

Переносимость puttext работает только на компьютерах, имеющих совместимую с IBM PC BIOS.

Смотрите также



Putw



     putw

Функция Помещает в поток целое значение.

Синтаксис #include

int putw(int w, FILE *stream);

Файл, содержащий stdio.h прототип

Описание putw выводит целое в указанный поток. Данная функ- ция не вызывает и не ожидает никакого специально- го выравнивания в файле.

Возвращаемое При успешном завершении putw возвращает выведенное значение целое w. При ошибке возвращает EOF.

Т.к. EOF является допустимым целым значением, то для определения ошибки нужно воспользоваться фун- кцией ferror.

Переносимость функция поддерживается в системах UNIX.

Смотрите также

Пример:

#include

#include

#define FNAME "test.$$$"

int main(void) { FILE *fp; int word; /* записать в файл слово */ fp = open(FNAME,"wb"); if(fp==NULL) { printf("Ошибка при открытии файла\n"); exit(1); } word = 94; putw(word,fp); if(ferror(fp)) printf("Ошибка, при записи в файл\n"); else printf("Успешная запись в файл\n"); fclose(fp); /* повторное открытие файла */ fp = fopen(FNAME,"rb"); if(fp==NULL) { printf("Ошибка при открытии файла%s\n",FNAME); exit(1); } word = getw(fp); if(ferror(fp)) printf("Ошибка, при чтении из файла\n"); else printf("Успешное чтение в файле, word = %d\n",word); fclose(fp); unlink(FNAME); return 0; }