Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Справочник по функциям С++.doc
Скачиваний:
168
Добавлен:
02.05.2014
Размер:
3.57 Mб
Скачать

Restorecrtmode

-----------------------------------------------------------------

НазначениеВосстанавливает режим монитора таким, каким он

был до вызова initgraph

Синтаксис#include<graphics.h>

void far restorecrtmode(void);

Прототип в graphics.h

Замечанияrestorecrtmode восстанавливает первоначальный

видеорежим, который был до вызова initgraph.

Данная функция может быть использована в

сочетании с функцией setgraphmode для

переключений между графическим и текстовым

режимами. textmode не может использоваться для

этой цели; а используется только в случае,

когда монитор находится в текстовом режиме, для

перехода к другому текстовому режиму.

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

значение

ПереносимостьЭта функция работает только на IBM PC и

совместимых компьютерах с графическими

контроллерами.

См. также getgraphmode,initgraph, setgraphmode

-----------------------------------------------------------------

rewind

-----------------------------------------------------------------

НазначениеУстановливает указатель текущего байта

на начало файла.

Синтаксис#include <stdio.h>

void rewind(FILE *stream);

Прототип в stdio.h

Замечания rewind(stream) эквивалентна fseek(stream,0L,

SEEK_SET) за исключением того, что rewind

очищает признаки конца файла и ошибки, а fseek

очищает только признак конца файла.

После вызова rewind следующей операцией над

файлом может быть либо ввод, либо вывод.

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

значение

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

ANSI Cи

См. также fopen,fseek,ftell

Пример См. fseek

-----------------------------------------------------------------

rmdir

-----------------------------------------------------------------

НазначениеУдаляет каталог файлов DOS

Синтаксис int rmdir (const char *path);

Прототип вdir.h

Замечанияrmdir удаляет каталог, путь доступа к которому

задается в path. При этом удаляемый каталог:

- должен быть пустым

- не должен быть текущим рабочим каталогом

- не должен быть корневым каталогом

Возвращаемоеrmdir возвращает 0, если каталог успешно

значениеудален. Возвращаемое значение -1 указывает на

ошибку и errno принимает одно из следующих

значений:

EACCES Доступ запрещен

ENOENT Путь доступа или файл не обнаружены

См. также chdir,getcurdir,getcwd,mkdir

-----------------------------------------------------------------

_rotl

-----------------------------------------------------------------

НазначениеПоразрядный сдвиг беззнакового целого числа

влево

Синтаксис unsigned _rotl(unsigned value, int count);

Прототип вstdlib.h

Замечания_rotl сдвигает указанную величину value влево

на count разрядов. Сдвигаемое значение является

целым беззнаковым.

Возвращаемое_rotl возвращает значение value, циклически

значениесдвинутое на count разрядов влево.

См. также _lrotl

Пример #include<stdlib.h>

main()

{

printf("Циклический сдвиг 0xABCD на 4 бита влево = %4X\n",

_rotl(0xABCD));

printf("Циклический сдвиг 0xABCD на 4 бита вправо= %4X\n",

_rotr(0xABCD));

printf("Циклический сдвиг 0x55555555 на 1 бит влево = %08lX\n",

_lrotl(0x55555555));

printf("Циклический сдвиг 0xAAAAAAAA на 1 бит вправо = %08lX\n",

_lrotr(0xAAAAAAAA));

}

Вывод программы:

Циклический сдвиг 0xABCD на 4 бита влево = BCDA

Циклический сдвиг 0xABCD на 4 бита вправо= DABC

Циклический сдвиг 0x55555555 на 1 бит влево = AAAAAAAA

Циклический сдвиг 0xAAAAAAAA на 1 бит вправо = 55555555

-----------------------------------------------------------------

_rotr

-----------------------------------------------------------------

НазначениеПоразрядный сдвиг беззнакового целого числа

вправо

Синтаксис unsigned _rotr(unsigned value, int count);

Прототип вstdlib.h

Замечания_rotr сдвигает указанную величину value вправо

на count разрядов. Сдвигаемое значение является

целым беззнаковым.

Возвращаемое_rotr возвращает значение value, циклически

значениесдвинутое на count разрядов вправо.

См. также _lrotr

-----------------------------------------------------------------

sbrk

-----------------------------------------------------------------

НазначениеИзменяет размещение сегмента данных

Синтаксис void *sbrk(int incr);

Прототип вalloc.h

Замечанияsbrk прибавляет incr байт к значению границы и

соответсвенно изменяет выделенную область. При

этом incr может быть отрицательным, в этом

случае размер выделенной области уменьшается.

sbrk сообщит о сбое, не произведя никаких

изменений выделенной области, если такое

изменение может привести к выделению области

большего размера, чем допустимо.

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

значениезначение границы. При ошибке sbrk возвращает -1

и errno принимает значение

ENOMEM Не хватает памяти

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

См. также brk

-----------------------------------------------------------------

scanf

-----------------------------------------------------------------

НазначениеОсуществляют форматный ввод из потока stdin

Синтаксис int scanf(const char *format[,adress, ...]);

Прототип вstdio.h

Замечанияscanf просматривает последовательность полей

ввода (по одному символу за раз) из потока

stdin. Затем каждое поле форматируется в

соответствии со спецификацией формата,

задаваемой для scanf в форматной строке, на

которую указывает format. После форматирования

введенных данных scanf запоминает их по адресу,

который задается с помощью аргумента,

следующего за format. Количество спецификаторов

форматов и адресов должно соответствовать

количеству полей ввода.

Форматная строка

Форматная строка, присутствующая в scanf и

подобных ей функциях cscanf, fscanf, sscanf,

vscanf, vfscanf и vsscanf, управляет вводом,

преобразованием и запоминанием данных из полей

ввода. При этом для заданных спецификаций

формата должно быть достаточное количество

адресных аргументов , в противном случае

результат работы функции непредсказуем и может

привести к катастрофическим последствиям.

Лишние адресные аргументы (которым нет

соответствующих форматов) просто игнорируются.

Форматная строка является символьной строкой,

которая содержит три типа объектов: неотобража-

емые символы, отображаемые символы и специфика-

ции формата.

- Неотображаемыми символами являются пробел

( ), символ табуляции (\t) и символ перехода

на новую строку (\n). Если функция ...scanf

встречает неотображаемый символ в форматной

строке, она будет считывать, но не сохранять

всю последовательность символов вплоть до

следующего отображаемого символа во входном

потоке.

- Отображаемыми символами являются все другие

ASCII-символы за исключением символа процента

(%). Если функция ...scanf встречает в строке

форматов отображаемый символ, то

она прочитает, но не сохранит соответствую-

щий ему символ.

- Спецификации формата предписывают функциям

...scanf осуществить чтение и преобразование

символов из входного поля в значения

определенного типа, затем запомнить их по

адресу, указанному соответствующим адресным

аргументом.

Завершающий (последний) неотображаемый символ

не читается (включая символ перехода на новую

строку), если только он не описан явно в

форматной строке.

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

Спецификации формата функций ...scanf имеют

следующий вид:

% [*] [widht] [F|N] [h|l|L] символ_типа

Спецификация каждого формата начинается с сим-

вола процента(%). После этого символа следуют

символы спецификации в следующем порядке:

- необязательный символ подавления назначения[*]

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

- необязатальный модификатор размера указателя [F|N]

- необязатальный модификатор типа аргумента [h|l|L]

- символ типа

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

Ниже представлено общее описание строки форматов в функциях

...scanf, управляющей формированием входного потока данных .

-----------------------------------------------------------------

Символ или Чем управляет или что определяет

спецификатор

-----------------------------------------------------------------

* Отменяет присваивание следующего поля ввода

width Максимальное число считываемых символов;

меньшее количество символов может быть счи-

тано в случае, если функция ...scanf встре-

тит неотображаемый или непреобразуемый сим-

вол.

size Изменяет размер по умолчанию адресного

аргумента.

N = указатель типа near,

F = указатель типа far

argument Изменяет назначаемый по умолчанию тип адрес-

type ного аргумента.

h = тип short int

l = тип long int (если символ типа

указывает на преобразование к

целому типу)

l = тип double (если символ типа

указывает на преобразование к

типу c плавающей запятой)

L = тип long double (допустим только

при преобразованиях к типу c плавающей запятой)

-----------------------------------------------------------------

Символы типа функций ...scanf.

Следующая таблица содержит список символов типа, типы вход-

ных данных, определяемых каждым из символов типа, и формат, в

ко- тором эти введенные данные будут сохранены.

Информация, приведенная в таблице, основана на предположе-

нии, что спецификация формата не содержит необязательные

символы, спецификаторы и модификаторы (*, widht или size). Для

того, чтобы увидеть, как влияет использование необязательных

элементов, обратитесь к таблице, следующей за данной.

-----------------------------------------------------------------

Символ Ожидается на входе Тип аргумента типа

-----------------------------------------------------------------

Числа

d Десятичное целое Указатель на int (int *arg)

D Десятичное целое Указатель на long (long *arg)

о Восьмиричное целое Указатель на int (int *arg)

O Восьмиричное целое Указатель на long (long *arg)

i Десятичное, восьми- Указатель на int (int *arg)

ричное или шестнад-

цатиричное целое

I Десятичное, восьми- Указатель на long (long *arg)

ричное или шестнад-

цатиричное целое

u Десятичное целое Указатель на unsigned int

без знака (unsigned int *arg)

U Десятичное целое Указатель на unsigned long

без знака (unsigned long *arg)

x Шестнадцатиричное Указатель на int (int *arg)

целое

X Шестнадцатиричное Указатель на long (long *arg)

целое

e Число с плавающей Указатель на float

запятой (float *arg)

E Число с плавающей Указатель на float

запятой (float *arg)

f Число с плавающей Указатель на float

запятой (float *arg)

g Число с плавающей Указатель на float

запятой (float *arg)

G Число с плавающей Указатель на float

запятой(float *arg)

-----------------------------------------------------------------

Символы

s Cтрока символов Указатель на массив символов

(char arg[])

c Символ Указатель на символ (char *arg)

Если ширина поля W задана

вместе c символом типа (напри-

мер %5c), то тип аргумента -

указатель на массив из W сим-

волов (char arg[W])

% Символ % Преобразование не осуществляется, символ % сохраняется

-----------------------------------------------------------------

Указатели

n Указатель на int (int *arg)

Число успешно считанных

символов запоминаются в этом

целом.

P Шестнадцатиричное Указатель на объект (far*

число в виде или near*)

YYYY:ZZZZ По умолчанию %p преобразова-

или ZZZZ ние использует тип указателя,

соответствующий модели памяти

-----------------------------------------------------------------

Поля ввода

Полями ввода могут быть:

- все символы до следующего неотображаемого символа (не

включая его);

- все символы до первого непреобразуемого по указанной

спецификации формата символа (например, числа "8" и "9" по

восьмиричному формату);

- n символов, где n - ширина поля.

Соглашения

Для некоторых спецификаций формата приняты определенные сог-

лашения, которые обобщены ниже.

%с преобразование

По этой спецификации читается следующий символ, включая

неотображаемый символ. Для пропуска одного неотображаемого

символа и чтения следующего отображаемого символа используйте

спецификацию %1s .

%Wc преобразование (W = спецификация ширины поля)

Адресный аргумент является указателем на массив символов; мас-

сив состоит из W элементов (char arg[W]).

%s преобразование

Адресный аргумент является указателем на массив символов (сhar

arg[]).

Размер массива size должен быть не менее (n+1) байт, где n -

длина строки s (в символах). Поле ввода завершается пробелом

или символом перехода на новую строку (\n). Ограничитель

строки (\0) автоматически добавляется в строку после

считывания и хранится в последнем элементе массива.

%[образец] преобразование

Набор символов, заключенных в квадратные скобки, может

вводиться по формату s. Адресный аргумент является указателем

на массив символов (char arg[]).

Квадратные скобки заключают в себя набор символов, определяе-

мых как "образец", или множество допустимых символов, из кото-

рых должна состоять вводимая строка (поле ввода).

Если первым символом в скобках является символ (^), то вво-

диться будут все ASCII-символы из входного потока, кроме зак-

люченных в скобки. (Обычно сам символ (^) включается в набор

допустимых входных символов, если он не встречается в скобках

еще раз, не на первой позиции).

Поле ввода является строкой, не разделенной неотображаемыми

символами. Функция ...scanf считывает соответствующее поле

ввода до первого символа, не являющегося элементом допустимого

набора символов (или элементом инвертированного набора).

Приведем два примера этого типа преобразования:

%[abcd] - определяет, что входное поле должно состоять из

символов a,b,c или d .

%[^abcd]- определяет, что входное поле долхно состоять из

любых символов, кроме a,b,c или d .

Вы можете также использовать ограничитель диапазона символов

(цифровых или буквенных) в наборе символов. Например, для

выбора всех десятичных цифр вы должны определить набор

символов следующим образом:

%[0123456789]

или тот же самый набор можно определить следующим образом:

%[0-9]

Для выбора алфавитно-цифровых символов вы можете использовать

следующие краткие записи:

%[A-Z] Выбирает все буквы верхнего регистра

%[0-9A-Za-z] Выбирает все десятичные цифры и все буквы

(верхнего и нижнего регистров)

%[A-FT-Z] Выбирает все буквы верхнего регистра от A

до F и от T до Z

При определении диапазонов символов в наборах действуют

следующие правила:

- символ, предшествующий дефису (-), должен быть лексически

меньшим, чем символ после дефиса.

- дефис не должен быть ни первым, ни последним символом

набора (в противном случае это означает, что ограничитель

диапазона не задан ).

- символы по обе стороны от дефиса должны быть граничными

символами диапазона и не должны принадлежать другому

диапазону.

Ниже приводятся несколько примеров, в которых дефис обознача-

ет только символ дефиса, а не диапазон между двумя символами:

%[-+*/] Четыре арифметических действия

%[z-a] Символы z,- и a

%[+0-9-A-Z] Символы + и -, и диапазоны от 0 до 9 и от A до Z

%[^-0-9+A-Z] Все символы, кроме + и -, а также кроме символов

из диапазонов от 0 до 9 и от A до Z

%e,%E,%f,%g,%С преобразования (с плавающей запятой)

Числа с плавающей запятой во входном поле должны соответство-

вать следующему общему формату:

[+/-] ddddddddd [.] dddd [E|e] [+/-] ddd

где: [элемент] обозначает, что "элемент" является

необязательным элементом формата; ddd представляет

собой десятичное, восьмиричное или шестнадцатиричное

число.

Кроме того, +INF, -INF, +NAN, -NAN распознаются как числа с

плавающей запятой. Обратите внимание, что знак и большие буквы

являются обязательными.

%d,%i,%o,%x,%D,%I,%O,%X,%c,%n преобразования

Указатели на символ без знака, целое без знака (unsigned int)

или длинное целое без знака (unsigned long) могут быть исполь-

зованы в любом преобразовании, где допускаются указатели на

символ, целое и длинное целое.

Символ подавления присваивания

Символом подавления присваивания при вводе значений с по-

мощью функции ...scanf является символ "звездочка" (*); его не

следует путать с оператором косвенности языка Си (который

также обозначается звездочкой).

Если этот символ (*) следует в спецификации формата за сим-

волом (%), то следующее входное поле будет считано, но не

присво- ено следующему адресному аргументу. Предполагается,

что подавляе- мые входные данные специфицируются символом

типа, который следует за символом (*).

Заключение об успешном сравнении литер с образцом и подавле-

нии присваивания непосредственно сделать нельзя.

Спецификаторы ширины

Спецификатор ширины (n), десятичное целое число, задает мак-

симальное количество символов, которые будут считаны из

текущего поля ввода.

Если входное поле содержит менее, чем n символов, функция ...

scanf считывает вначале в этом поле все символы, а затем

обраба- тывает следующее поле и спецификацию формата.

Если неотображаемый или непреобразуемый символ встретился в

пределах указаной ширины поля ввода, то функция считывает,

преоб- разует и размещает по указанному адресу символы,

находящиеся до неотображаемого или непреобразуемого символа,

после чего функция обратится к следующей спецификации формата.

Непреобразуемыми считаются те символы, которые не могут быть

преобразованы в соответствии с указанной спецификацией (такие

как, например, символы "8" или "9" для восьмиричного формата и

"J" либо "K", если указан шестнадцатиричный или десятичный

формат).

-----------------------------------------------------------------

Спецификатор ширины Как ширина поля влияет на сохраняемые

функцией данные

-----------------------------------------------------------------

n до n символов будет считано, преоб-

разовано и сохранено по адресу, указан-

ному текущим адресным аргументом функ-

ции

-----------------------------------------------------------------

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

Модификаторы входного размера (N и F) и модификаторы типа

аргумента (h,l и L) оказывают влияние на интерпретацию

функцией ...scanf соответствующих адресных аргументов arg[f].

F и N осуществляют замену установленного по умолчанию или объ-

явленного размера аргумента arg.

h,l и L указывают, какого типа входные данные (версии) будут

использоваться (h=short, l=long, L=long double). Входные

данные будут преобразованы в соответствии с указанным типом.

Аргумент arg для этих входных данных должен указывать на

объект соответствующего размера (объект типа short для

спецификации %h, объект типа long или double для спецификации

%l и объект типа long double для %L).

-----------------------------------------------------------------

Модификатор Как влияет на преобразование

-----------------------------------------------------------------

F Заменяет установленный по умолчанию или

объявленный размер; arg интерпретируется как

указатель типа far.

N Заменяет установленный по умолчанию или

объявленный размер; arg интерпретируется как

указатель типа near; не может быть

использован при проведении преобразований в

огромной (huge) модели памяти.

h Для d,i,o,u,x типов: преобразует ввод в тип

short и сохраняет в объекте типа short;

для D,I,O,U,X типов: не оказывает влияния

для e,f,c,s,n,p типов: не оказывает влияния

l Для d,i,o,u,x типов: преобразует ввод в тип

long int и сохраняет в объекте типа long;

для e,f,g типов: преобразует ввод в тип

double и сохраняет в объекте типа double;

для D,I,O,U,X типов: не оказывает влияния

для c,s,n,p типов: не оказывает влияния

L Для e,f,g типов: преобразует ввод в тип long

double и сохраняет в объекте типа long

double.

L не оказывает влияния на другие форматы.

-----------------------------------------------------------------

Когда ...scanf прекращает чтение потока данных.

Функция ...scanf может прекратить чтение потока данных до

того, как встретит обычный символ конца поля (неотображаемый

сим- вол), или завершить свою работу по различным причинам.

Функция ...scanf прекратит чтение и сохранение текущего поля и

перейдет к следующему входному полю, если имеет место один из

следующих случаев:

- Символ подавления присваивания (*) следует за символом (%)

в спецификации формата; текущее входное поле будет считано,

но не сохранено.

- Было считано width символов (width - спецификация ширины

входного поля, положительное целое десятичное число в спе-

цификации формата).

- Следующий считанный символ не может быть преобразован в

соответствии с текущим форматом (например, "А", если задан

десятичный формат).

- Следующий символ во входном поле не соответствует заданному

множеству допустимых символов, указанному в образце (или

соответствуюет инвертированному множеству допустимых

символов).

Когда функция ...scanf прекращает чтение текущего входного

поля по одной из этих причин, следующий символ считается

несчи- танным и будет первым символом следующего входного поля

или пер- вым символом ввода для последующих операторов чтения

данных.

Функция ...scanf может завершить свою работу по следующим

причинам:

- Следующий символ во входном поле противоречит соответ-

ствующему отображаемому символу в строке форматов.

- Следующий символ во входном поле есть символ EOF.

- Строка форматов исчерпана.

Если последовательность символов, не являющаяся спецификаци-

ей формата, встретилась в строке форматов, то она дожна быть

сравнена с текущей последовательностью символов входного поля.

При этом функция ...scanf будет осуществлять только чтение, но

не сохранение совпадающих символов. Если при чтении входного

поля встречается символ, не совпадающий с указанным, то он

остается во входном поле как будто он никогда функцией не

считывался.

ВозвращаемоеВсе функции ...scanf возвращают число успешно

значениечитанных, преобразованных и размещен- ных по

указанным адресам входных полей; в возв-

ращаемое значение не включается число считанных

полей которые были считаны функцией, но не были

ею сохранены.

Если функция при чтении входного потока встре-

чает признак конца файла, то она возвращает

значение EOF.

Если ни одно поле не было сохранено, функция

возвращает значение 0.

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

ANSI C. Определена в книге Кернигана и Ритчи.

См. также cscanf,fscanf,printf,sscanf,vfscanf,vscanf,

vsscanf

-----------------------------------------------------------------