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

Int fclose(file *имя);

В функцию передается указатель на структуру типа FILE (имя открытого потока), и при успешном закрытии потока функция возвращает 0, иначе – EOF (–1). Например:

fclose(fp);

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

FILE *freopen(const char *filename, const char*mode, FILE * fp);

Эта функция закрывает поток fp с прежним заданным именем файла и открывает снова этот же поток с именем файла, на который указывает строка filename в режиме, указанном в строке mode. В случае успеха функция возвращает указатель на описание открытого потока, которое будет совпадать с fp, иначе NULL.

При работе с файлами большая роль отводится обработке ошибок. Для анализа ошибок можно использовать дополнительно функцию, имеющую прототип:

Void perror(const char *s);

Эта функция выводит на экран строковую константу s вместе с системной ошибкой. Список системных ошибок определен в файле <stdlib.h>. Например:

FILE *fp=fopen("abc.doc","r");

if((fp==NULL){perror("Не могу открыть файл: "); return -1;}

В данном случае, если файл в текущем директории отсутствует, то на экран выведется:

Не могу открыть файл: No such file or directory

14 С++. Введення в файл та виведення з файлу символів та рядків

Посимвольный ввод данных в файл и вывод данных из файла

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

Int fputc(int ch, file *fp);

Эта функция помещает символ int ch после преобразования в тип char в открытый поток fp, связанный с файлом. В случае успеха возвращает код записываемого в файл символа, а в случае ошибки или достижения конца файла – EOF.

Пример. Запись одного символа и массива символов в открытый файл через поток stream

char simv=’W’, str1[]=”Запорожье”;

fputc(simv, fp); //запись символа в файл через поток fp

for (int i=0; i<10; i++)

fputc(str1[i], fp);//запись 10 символов в файл через поток fp

Функция посимвольного ввода (чтения) из файла имеет прототип:

Int fgetc(file *fp);

Эта функция возвращает символ из открытого потока fp, связанного с файлом, или EOF (–1) в случае ошибки или достижения конца файла.

Пример. Чтение одного символа и массива символов из открытого файла через поток fp

char s, str2[10];;

s=fgetc(fp); //чтение символа из файла через поток fp

printf(“s=%c\n”,s); //вывод на экран прочитанного из файла символа

for (int i=0; i<10; i++)

str2[i]=fgetc(fp);//чтение 10 символов из файла через поток fp

printf(“%s\n”,str2); //вывод на экран прочитанных из файла символов

Построчный ввод данных в файл и вывод данных из файла

Функция построчного вывода (записи) в файл имеет прототип:

Int fputs(char* string, file *fp);

Эта функция переносит байты из строки string в открытый файл через поток fp. Перенос завершается при достижении символа '\0', который в файл не заносится. В случае успеха возвращает код последнего записанного в файл символа, а в случае ошибки или достижения конца файла – EOF.

Пример 4 Запись одной строки и массива строк в открытый файл через поток fp

char *st1=”Физика”, *s1[3]={”История”,”Математика”,”Экология”};

fputs(st1, fp);//запись строки в файл через поток fp

for (int i=0;i<3;i++)

fputs(s1[i], fp);//запись 3-х строк в файл через поток fp

Функция построчного ввода (чтения) из файла имеет прототип:

char*fgets(char *string,int n,FILE *fp);

Эта функция принимает байты из открытого файла и размещает их по адресу, заданному указателем string. Прием завершается после приема n байт или при получении символа '\n'. Символ '\n' также передается в строку string. Последним символом является '\0'. В случае успеха возвращает указатель на строку string, а в случае ошибки или достижения конца файла NULL–указатель. Для приема строки из файла необходимо зарезервировать место в памяти.

Пример. Чтение одной строки и массива строк из открытого файла

char st2[20], char s2[3][20];;

fgets(st2,20, fp);//чтение из файла строки, не больше 20 символов

puts(st2); //вывод на экран прочитанной из файла строки

for (int i=0;i<3;i++)

{fgets(s2[i],20, fp);//чтение из файла 3-х строк, не больше 20 символов

puts(s2[i]);} //вывод на экран прочитанных из файла строк

На что следует еще раз обратить внимание. Функция fgets(), обнаружив символ '\n', записывает его в строку и затем дописывает символ '\0'. Функция fputs(), встретив символ '\0' завершает запись в файл без всяких преобразований.

Таким образом, если записывать в файл несколько строк подряд без символа '\n' в конце строки, используя функцию fputs(), то в файле будет только одна строка. При чтении строки из файла функцией fgets(), функция puts()выведет на экран одну суммарную строку.

Если записывать в файл несколько строк и символа '\n' после каждой строки, используя функцию fputs(), в файле будет несколько строк, но в конце каждой символы '\n'. При чтении строк из файла функцией fgets() символ'\n' преобразуется в символы '\n','\0' и функция puts() выведет на экран заданное число строк с символом '\n' в конце каждой строки, т.е. между выводимыми строками появятся пустые строки.

15 С++. Введення в файл та виведення з файлу форматованих даних та блоків даних

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

Функция форматированного вывода (записи) в файл имеет прототип:

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]