Функции стандартной библиотеки

Содержание

Слайд 2

Функции стандартной библиотеки Функции ввода/вывода. Функции работы со строками и символами. Математические функции.

Функции стандартной библиотеки

Функции ввода/вывода.
Функции работы со строками и символами.
Математические

функции.
Слайд 3

ФУНКЦИИ СТАНДАРТНОЙ БИБЛИОТЕКИ. Для использования в программе обращения к стандартной библиотеке,

ФУНКЦИИ СТАНДАРТНОЙ БИБЛИОТЕКИ.

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

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

В программах на C++ могут использоваться функции, унаследованные от библиотеки С.

Слайд 4

Ввод/вывод в C++ реализуется либо с помощью функций, унаследованных от библиотеки

Ввод/вывод в C++ реализуется либо с помощью функций, унаследованных от библиотеки

С, либо с помощью потоков C++.
Смешивать эти два способа в одной программе можно только синхронизировав ввод с помощью функции sync_with_stdio().

Функции ввода/вывода

Слайд 5

ФУНКЦИИ ВВОДА/ВЫВОДА. Каждый способ имеет свои преимущества: Преимущество использования потоков в

ФУНКЦИИ ВВОДА/ВЫВОДА.

Каждый способ имеет свои преимущества:
Преимущество использования потоков в том, что

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

Кроме того, существует множество программ, написанных на С и перенесенных на C++, с которыми программисту приходится сталкиваться.

Слайд 6

ФУНКЦИИ ВВОДА/ВЫВОДА. Для использования функций ввода/вывода в стиле С необходимо подключить

ФУНКЦИИ ВВОДА/ВЫВОДА.

Для использования функций ввода/вывода в стиле С необходимо подключить к

программе заголовочный файл или .
При вводе/выводе данные рассматриваются как поток байтов.

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

Слайд 7

ОТКРЫТИЕ ПОТОКА. Работа с потоком начинается с его открытия. Поток можно

ОТКРЫТИЕ ПОТОКА.

Работа с потоком начинается с его открытия.
Поток можно открыть

для чтения или записи в двоичном или текстовом режиме.
Функция открытия потока имеет формат:
Первый параметр — имя открытого файла в виде С-строки
Второй параметр — режим открытия файла
При успешном открытии потока функция возвращает указатель на предопределённую структуру типа FILE, содержащую всю необходимую для работы с потоком информацию, или NULL в противном случае.

FILE* fopen(const char* filename, const char* mode);

Слайд 8

Открытие потока. режим открытия файла:

Открытие потока.

режим открытия файла:

Слайд 9

ОТКРЫТИЕ ПОТОКА. По умолчанию файл открывается в текстовом режиме, при котором

ОТКРЫТИЕ ПОТОКА.

По умолчанию файл открывается в текстовом режиме, при котором комбинация

символов «возврат каретки» и «перевод строки» (0x13 0x10) при вводе преобразуются в одиночный символ перевода строки.
при выводе выполняется обратное преобразование
В двоичном режиме эти преобразования не выполняются.
Слайд 10

Открытие потока. Пример: Указатель f используется в дальнейших операциях с потоком.

Открытие потока.

Пример:

Указатель f используется в дальнейших операциях с потоком.
Его передают

функциям ввода/вывода в качестве параметра.

FILE *f = fopen("d:\\cpp\\data", "rb+");

Слайд 11

Открытие потока. При открытии потока с ним связывается область памяти, называемая

Открытие потока.

При открытии потока с ним связывается область памяти, называемая буфером.

При

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

Чтение осуществляется блоками, равными размеру буфера, и данные читаются из буфера.

С помощью функций setbuf и setvbuf можно управлять размерами и наличием буферов.

Следует иметь в виду, что при аварийном завершении программы выходной буфер может быть не выгружен, и возможна потеря данных.

Слайд 12

Открытие потока. Существует пять предопределенных потоков, которые открываются в начале работы

Открытие потока.

Существует пять предопределенных потоков, которые открываются в начале работы программы.
1. стандартный

ввод stdin
2. стандартный вывод stdout
3. стандартный вывод сообщений об ошибках stderr
4. стандартный дополнительный поток stdaux
5. стандартная печать stdprn

Первые три потока по умолчанию относятся к консоли.

Эти указатели можно использовать в любой функции ввода/вывода там, где требуется указатель потока.

Слайд 13

ВВОД/ВЫВОД В ПОТОК. Ввод/вывод в поток можно осуществлять различными способами: в

ВВОД/ВЫВОД В ПОТОК.

Ввод/вывод в поток можно осуществлять различными способами:
в виде последовательности

байтов
в виде символов и строк
с использованием форматных преобразований

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

Слайд 14

Ввод/вывод в поток. Операции ввода/вывода выполняются, начиная с текущей позиции потока,

Ввод/вывод в поток.

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

положением указателя потока.

Указатель устанавливается при открытии на начало или конец файла (в соответствии с режимом открытия) и изменяется автоматически после каждой операции ввода/вывода.

Текущее положение указателя можно получить с помощью функций ftell и fgetpos и задать явным образом с помощью функций fseek и fsetpos.

Эти функции нельзя использовать для стандартных потоков.

Слайд 15

Ввод/вывод в поток. Основные функции ввода/вывода потока :

Ввод/вывод в поток.

Основные функции ввода/вывода потока :

Слайд 16

Ввод/вывод в поток. Основные функции ввода/вывода потока :

Ввод/вывод в поток.

Основные функции ввода/вывода потока :

Слайд 17

ЗАКРЫТИЕ ПОТОКА. Поток закрывается либо при завершении программы, либо явным образом

ЗАКРЫТИЕ ПОТОКА.

Поток закрывается либо при завершении программы, либо явным образом с

помощью функции fclose:
int fclose(FILE*);
Перед закрытием потока информация из связанных с ним буферов выгружается на диск.

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

Слайд 18

ОБРАБОТКА ОШИБОК. Функции работы с потоком возвращают значения, которые рекомендуется анализировать

ОБРАБОТКА ОШИБОК.

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

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

При работе с файлами часто используются функции feof и ferror.

Слайд 19

Обработка ошибок. int feof (FILE*) возвращает не равное нулю значение, если

Обработка ошибок.

int feof (FILE*)

возвращает не равное нулю значение, если достигнут конец

файла, в противном случае 0

int ferror(FILE*)

возвращает не равное нулю значение, если обнаружена ошибка ввода/вывода, в противном случае 0

Слайд 20

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

Пример работы с потоками.

Постановка задачи

В файле хранятся сведения о мониторах:
тип,

оптовая и розничная цены и примечание.
Данные в каждой строке записаны единообразно:
20 символов ― тип монитора;
5 символов ― целое число, представляющее оптовую цену;
5 символов ― целое число, представляющее и розничную цену;
40 символов ― примечание.
Необходимо:
построчно считать данные из текстового файла в буферную переменную s;
сформировать из них структуру mon;
записать mon в двоичном режиме в выходной файл;
считать из этого файла произвольную запись.
Слайд 21

Пример работы с потоками. #include #include #include #include int main(){ FILE

Пример работы с потоками.

#include
#include
#include
#include
int

main(){
FILE *fi, *fo;
if((fi = fopen("d:\\temp\\file.txt", "r")) == 0){
cout << " Ошибка открытия входного файла "; return 1;}
if((fo = fopen("d:\\temp\\binfile.out", "w+b")) == 0){
cout << " Ошибка открытия выходного файла "; return 1;}
const int dl = 80;
char s[dl];
struct{
char type[20];
int opt, rozn;
char comm[40];
}mon;
int kol = 0; // Количество записей в файле
Слайд 22

Пример работы с потоками. while (fgets(s, dl, fi)){ // Преобразование строки

Пример работы с потоками.

while (fgets(s, dl, fi)){
// Преобразование строки в структуру:
strncpy(mon.type,

s, 19);
mon.type[19]='\0';
mon.opt = atoi(&s[20]); // Описание atoi см. в след. разделе
mon.rozn = atoi(&s[25]);
strncpy(mon.comm, &s[30], 40);
fwrite(&mon, sizeof mon, 1, fo);
kol++;
}
fclose(fi);
Слайд 23

Пример работы с потоками. cout int i; cin >> i; //

Пример работы с потоками.

cout << " Введите номер записи:";
int i; cin

>> i; // Номер записи
if (i >= kol){cout << " Запись не существует "; return 1;}
// Установка указателя текущей позиции файла на запись i:
fseek(fo, (sizeof mon)*i, SEEK_SET);
fread(&mon, sizeof mon, 1, fo);
cout << "mon.type " << mon.type << " opt " << mon.opt
<< " rozn " << mon.rozn << endl;
fclose(fo);
return 0;
}
Слайд 24

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

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

Функции работы со строками и

символами
Слайд 25

ФУНКЦИИ РАБОТЫ СО СТРОКАМИ И СИМВОЛАМИ. В C++ есть две возможности

ФУНКЦИИ РАБОТЫ СО СТРОКАМИ И СИМВОЛАМИ.

В C++ есть две возможности работы

со строками:
функции, унаследованные из библиотеки С (заголовочный файл или ).
библиотечный класс C++ string, предоставляющий более широкие возможности представления, обработки и контроля строк.
Слайд 26

Функции работы со строками. Библиотека С содержит функции : копирования строк

Функции работы со строками.

Библиотека С содержит функции :
копирования строк (strcpy, strncpy)
сравнения

строк (strcmp, strncmp)
объединения строк (strcat, strncat)
поиска подстроки (strstr)
поиска вхождения символа (strchr, strrchr, strpbrk)
определения длины строки (strlen)
и другие
Слайд 27

Функции работы со строками. полезные функции преобразования строк в числа (файлы

Функции работы со строками.

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

и ):

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

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

Слайд 28

Функции работы со строками. Пример: (программа заполняет массив типа double из

Функции работы со строками.

Пример:

(программа заполняет массив типа double из строки)

#include


#include
#include
int main(){
char s[] = "2, 38.5, 70, 0, 0, 1", *p = s;
double m[10];
int i = 0;
do{
m[i++] = atof(p);
if (i>9) break;
} while(p = strchr(p, ','), p++);
for( int k = 0; kreturn 0;
}
Слайд 29

Функции работы с символами. функции проверки на принадлежность символа множеству (файлы и ):

Функции работы с символами.

функции проверки на принадлежность символа множеству (файлы

и ):
Слайд 30

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

Функции работы с символами.

Для каждой из перечисленных функций есть ее аналог

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

Функции принимают величину типа int и возвращают значение true, если условие выполняется

Слайд 31

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

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

Математические функции