Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 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; просмотров: 44; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.145.93.136 (0.009 с.) |