Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Vstup.docx
Скачиваний:
47
Добавлен:
28.09.2019
Размер:
6.42 Mб
Скачать

8.6 Функції роботи з файлами. Введення/виведення даних різного типу у файл/з файлу.

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

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

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' в конце каждой строки, т.е. между выводимыми строками появятся пустые строки.

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

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

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