Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lec_prog2_ru_2016_3.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
334.34 Кб
Скачать

Int fgetc(file *fp);

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

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

FILE *fp=fopen("abc.txt","r"); //открытие потока для чтения

if(fp==NULL){puts("ошибка открытия файла"); return -1;}

char z1, str2[9],z2;

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

printf("%c\n",z1);//вывод на экран прочитанного символа

for(int j=0;j<9;j++)

{str2[j]=fgetc(fp); //чтение 9-и символов из файла

printf("%c",str2[j]);} //вывод на экран cчитанных символов

while((z2=fgetc(fp))!=EOF) //чтение символов из файла

putchar(z2);//вывод на экран прочитанных символа

fclose(fp); //закрытие потока

2.4 Построчный ввод-вывод

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

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

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

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

FILE *fp=fopen("abc.txt","w"); //открытие потока для записи

if(fp==NULL){puts("ошибка открытия файла"); return -1;}

char *s1=”Физика”,*ms1[3]={"ТЕК","КЕ","ПТЦА"};

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

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

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

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

fputs("\n",fp);}

fclose(fp);//закрытие потока

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

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

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

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

FILE *fp=fopen("abc.txt","r"); // открытие потока для чтения

if(fp==NULL){puts("ошибка открытия файла"); return -1;}

char s2[20], ms2[3][20]; // зрезервируем память

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

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

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

{fgets(ms2[j],20,fp); // чтение из файла 3-х строк, <20 сим-в

puts(ms2[j]);} // вывод на экран считанных строк

fclose(fp); // закрытие потока

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

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

Пример. Запись и чтение строк без символа '\n' и с символом '\n'.

FILE* pf=fopen("b.txt","w"); //открытие потока

if(pf==NULL){puts("ошибка открытия файла"); return -1;}

char st1[]="Anna",st2[]="Маria",st3[20]; int n=0;

fputs(st1,pf); //запись в файл 4 символов

// fputs("\n",fp); //запись \n в файл через поток fp (2 символа)

fputs(st2,pf); //запись в файл 5 символов

//fputs("\n",fp); //запись \n в файл через поток fp (2 символа)

fclose(pf); //размер файла 9 байт (или 13 байт)

pf=fopen("b.txt","r");

if(pf==NULL){puts("ошибка открытия файла"); return -1;}

while(fgets(st3,20,pf)!=NULL)

{puts(st3); n++;}

printf("Число строк=%d",n);

fclose(pf);

На экран выведется

в первом случае:

во втором случае

AnnaМаria

Число строк=1

Anna

Маria

Число строк=2

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