Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву
Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Функції 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; просмотров: 85; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.216.115 (0.009 с.) |