Функції fprintf(), fscanf(), fgets(), fputs(), rewind() 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Функції fprintf(), fscanf(), fgets(), fputs(), rewind()



Ці функції відрізняються від відповідних printf(), scanf(), gets(), puts() тільки тим, що додається один параметр - покажчик на FILE створений при виклику функції Fopen().

char *fgets(char *s,int n, file *f); читає не більше n-1 байт із потоку f у рядок S, припиняючи читання при найденні нового рядка або кінця файлу. Смвол нового рядка міститься в кінець S. Рядок доповнюється нулем ('\0'). При виявленні кінця файлу або при помилці повертається Null, при успіху повертає покажчик на рядок S.

char *fputs(char *s, file *f); записує рядок символів з у потік f, символи «кінець рядка» у файл не записуються. при помилці EOF, при успіху не негативне число.

 

fgets() відрізняється від gets() обидві ці функції зчитують символ «нового рядка», але gets() зчитує й опускає його а fgets() зчитує й записує його в S.

 

Приклад:

 #include <stdio.h>

int main()

{ char str[20];                             //уводить строка

while((fgets(str,20,stdin)!=null) // якщо не кінець файлу

&& (str[0]!='\n')                       // і не введена порожній рядок

//цикл while закінчується при натисканні Enter на запит

//введення рядка -  що означає введений порожній рядок

fputs(str,stdout);

return 0;

}

Спробувати запустити цю програму коли: 1) рядок < 19 символів, 2) рядок = 19 символів, 3) рядок > 19 символів.

 

Приклад завдання додавання записів до файлу (створення нового фала й введення записів) з fprintf(), fscanf(), rewind().

 

#include <stdio.h>

#include <stdlib.h> // для exit()

int main()

{FILE *fp;

char word[40]; // для слова, що вводить

if ((fp=fopen(“words.w”,”a+”))==null) // якщо помилка при відкритті файлу для

                                                          //додавання записів або створення 

                                                          //нового файлу, якщо його не було, і

                                                          //запису в нього

{fprintf(stderr, “Неможливо відкрити файл words.w \n”);

exit(1);

}

puts(“Уведіть слова для додавання у файл”);

puts(“Для зупинки - натисніть ENTER на початку рядка”);

while ((gets(word)!=null)&&(word[0]!='\0'))

\\якщо не помилки при зчитуванні слова й 0 символ не Enter

fprintf(fp,”%s”,word); // записати слово у файл fp

puts(“Уміст файлу:”);

rewind(fp); // установити покажчик у файл fp у початок

while (fscanf(fp,”%S”,word)==1) // fscanf() повертає в лічені й

                                                   //правильно перетворених по заданим

                                                   // специфікаторам даних

puts(word);

if (fclose(fp)!=0) // якщо помилка при закритті

fprintf(stderr,”Помилка закриття файлу. \n”);

 

return 0;

}

 

Якщо вводиться порожній рядок, gets() розміщає \0 у першому елементі масиву word, тобто з індексом [0].

 

Довільний доступ до фалів fseek(), ftell()

int feek (file *f, long off, int org); переміщає поточну позицію у файлі, пов'язаному з потоком f (за допомогою fopen()) на позицію off, відлічувану від значення org, що повинне бути дорівнює однієї з 3х констант, певних в stdio.h:

                                   seek_cur - від поточної позиції

                                   seek_end - від кінця файлу

                                   seek_set - від початку файлу

Повертає значення типу int: 0 - якщо успішно, 1 якщо помилка

 

long ftell(file *f); визначає поточну позицію у файлі f і повертає, як довге ціле позитивне число байтів, відлічуване від початку файлу. при цьому при цьому 1й байт має № 0. В ANSI C це правило застосовно до бінарного але необов'язково застосовне до файлів відкритим у текстовому режимі. Тому в програмі файл відкритий у бінарному режимі.

 

Приклад: програма посимвольного виводу текстового файлу відкритого в бінарному режимі у зворотному порядку.

 

#include <stdio.h>

#include <stdlib.h>

#define ctrl_z '0_32' // це ознака eof у текстовому файлі MS-DOS

#define n[50]

 

int main()

{char file[n]; // для введення імені оброблюваного файлу

char ch;

file *fp;

long c,k;

puts(“Уведіть ім'я оброблюваного файлу”);

gets(file);

if ((fp=fopen(file,”rb”))==null)

// якщо помилка при відкритті файлу (тільки для читання в бінарному режимі)

{printf(“Не можу відкрити файл %s\n”,file);

exit(1);

}

fseek(fp,0L,seek_end); // перехід до кінця файлу. 0L - це довга ціла

                                // константа «нуль»

r=tell(fp);                 // у цьому випадку це в байтів у файлі

for (c=1L; c<=r; c++)

{fseek(fp,-c,seek_end); //рух назад

ch=getc(fp);          // читання чергового символу

if ((ch!=ctrl_z)&&(ch!='\r')) // для MS-DOS якщо це не символ кінця файлу

                                             // (^Z) і не символ '\r' (див. самий початок теми)

putchar(ch);                      // вивід на екран поточного символу

}

putchar('\n');

fclose(fp);

return 0;

}

 



Поделиться:


Последнее изменение этой страницы: 2021-12-15; просмотров: 44; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.145.93.136 (0.009 с.)