Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ГОС_ответы.doc
Скачиваний:
35
Добавлен:
27.10.2018
Размер:
21.59 Mб
Скачать

Int main()

{int a=5,b=3;

a=func(a,&b); //a=25, b=27

return 0;}

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

template <class A>

Void func(a);

13 С++. Поняття потоку.Файлові операції. Відкриття та закриття потоку, різні режими відкриття, перевідкриття потоку

Функции потокового файлового ввода-вывода включены в стандарт ANSI языка С и их обычно называют функциями стандартного ввода-вывода. Они описаны в заголовочном файле <stdio.h> – стандартный ввод-вывод.

Когда запускается любая программа на языке С++, операционная система открывает для нее (программы) стандартные потоки, в частности, имеющие имена stdin и stdout, под которыми подразумеваются соответственно клавиатура и экран монитора.

Таким образом, говоря о вводе-выводе с точки зрения прикладного программирования, будем пока считать, что мы посылаем данные для ввода в поток с именем stdout, который донесет их до экрана монитора, а для ввода с клавиатуры – будем извлекать данные из потока, который называется stdin. Такой ввод-вывод бывает двух видов: неформатированный и форматированный.

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

С началом выполнения программы автоматически открываются стандартные потоки: ввод данных с клавиатуры stdin, вывод данных на экран stdout, вывод сообщений об ошибках на экран монитора stderr. Все другие потоки для обмена данными между файлами нужно открыть явно. Когда поток открывается, он связывается со структурой типа FILE, содержащей всю информацию для работы с потоком. Определена также специальная константа, обозначающая конец файла: #define EOF (-1) //индикатор конца файла

Функции обмена с файлами могут работать в двух режимах: текстовом и двоичном. По умолчанию режим устанавливается текстовый. В текстовом режиме при записи данных в файл символ '\n' преобразуется в два символа CR LF('\n',‘\0’). Нажатие клавиш Ctrl-Z (Ah) воспринимается как символ конца строки ‘\0’, который в файл не заносится. При чтении данных из файла в текстовом режиме символы CR LF ('\n'‘\0’) преобразуются в один символ '\n'. При обмене с файлом в двоичном режиме никаких преобразований символов не производится.

Функция открытия потока имеет прототип:

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

Эта функция возвращает указатель на структуру типа FILE. Если поток не удалось открыть, функция возвращает NULL-указатель. Возвращаемое значение указателя необходимо присвоить переменной и использовать эту переменную для обмена данными с файлами.

В эту функцию предается переменная filename – указатель на строку, задающую путь и имя файла (если путь не задан, то по умолчанию выбирается текущий диск и директорий) и переменная mode ‑ указатель на строку, задающую режим открытия потока и состоящую из комбинаций предопределенных символов:

w – поток открывается только для записи в файл, w+ – поток открывается для записи в файл и для чтения из файла. Если файл не существует, он создается. Если файл существует, его прежнее содержимое пропадает;

r – поток открывается только для чтения из существующего файла; r+ – поток открывается для чтения из существующего файла и записи в файл;

a – поток открывается для записи данных в конец (для добавления) файла. a+ – поток открывается для записи данных в конец (для добавления) файла и для чтения из файла. Если файл не существует, он создается;

t – поток открывается в текстовом режиме, специфицируется после r, w, a, r+, w+, a+;

b – поток открывается в двоичном режиме, специфицируется после r, w, a, r+, w+, a+;.

Пример. Открывается поток для записи данных в файл myfile.txt на диске D в директории USER:

FILE *fp;

fp=fopen("D:\\User\\myfile.txt","w"));

if((fp==NULL){puts (“ошибка открытия файла”);

return -1;} // проверка правильности открытия потока

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