Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Лекція №11. while ( fseek (fp, offset++, 0) = = 0)




Else

Else

{

while (fseek (fp, offset++, 0) = = 0)

putchar (getc (fp));

fclose (fp);

}

}

Перший із трьох аргументів функції fseek() є вказівником типу FILE на файл, у якім ведеться пошук. Файл слід відкрити, використовуючи функцію fopen().

Другий аргумент названий “offset” (от чому ми вибрали дане ім'я для змінної). Цей аргумент повідомляє, як далеко слід пересунутися від початкової крапки (див. нижче); він повинен мати значення типу long, яке може бути позитивним (рух уперед) або негативним (рух назад).

Третій аргумент є кодом, що визначають початкову крапку:

Код Положення у файлі

0 початок файлу

1 поточна позиція

2 кінець файл (у деяких системах може не передбачатися)

Функція fseek () повертає 0, якщо всі добре, і -1, якщо є помилка, наприклад спроба переміщатися за межі файлу. Тепер ми можемо роз'яснити наш маленький цикл:

while (fseek (fp, offset+ +, 0) = = 0) putchar(getc(fp));

Оскільки змінна offset ініціалізована нулем, при першім проходженні через цикл ми маємо вираз

fseek (fp, 0L, 0)

означаюче, що ми йдемо у файл, на який посилається вказівник fp, і знаходимо байт, що відстоїть на 0 байт від початку, тобто перший байт. Потім функція putchar() друкує вміст цього байта. При наступнім проходженні через цикл змінна offset збільшується до 1L, і друкується наступний байт. По суті, змінна offset діє подібно індексу для елементів файлу. Процес триває доти, поки offset не спробує потрапити в fseek() після кінця файлу. У цьому випадку fseek() повертає значення -1 і цикл припиняється.

Цей останній приклад чисто навчальний. Немає необхідності використовувати fseek(), тому що getc() так чи інакше проходить через файл байт за байтом; fseek() наказала getc() «подивитися» туди, куди вона сама вже збиралася подивитися.

/* друк в прямому й зворотному напрямках */

#include <stdio.h>

main(number, names)

char *names [ ];

{

FILE *fp;

long offset = 0L;

if (fp = fopen(names[l], "r")) = = 0)

printf (“Я не можу відкрити %s.\n", names[l]);

{

while (fseek(fp, offset++, 0) = = 0)

{

putchar(getc(fp));

if (fseek(fp, -(offset + 3), 2) = = 0) putchar(getc(fp));

}

fclose(fp);

}

Застосування цієї програми до файлу, що містить ім'я «Мальволио», дає такий приємний результат: Моаилльоввоьллиаом

Наша програма друкує перший символ файлу, потім останній, потім друг, що потім передує останньому і т.д. Ми тільки додали от ці рядки в останню програму:

if (fseek(fp, - (offset + 3), 2) = = 0) putchar(getc(fp));

Код 2 в операторові припускає, що ми будемо рахувать позиції від кінця файлу. Знак мінус означає рахунок у зворотному напрямку. +3 стоїть тут тому, що ми починаємо з останнього регулярного символу файлу й пропускаємо кілька символів «новий рядок» і EOF у самому кінці файлу. (Точне значення цього коректування залежить від типу системи. Наші файли мають наприкінці по два символи нового рядка, за якими ідуть два EOF, тому ми саме їх і обходимо.)

Таким чином, ця частина програми чергує друк у зворотному напрямку й друк в прямому напрямку.

 

з навчальної дисципліни «Загальна психологія»

тема «Види соціальних груп та психологічні явища в сфері міжособових відносин» (підсумок)

тема «Відчуття» (ознайомлення)

 

(заняття 10-11)

 

викладач Ушакова В. І.





Поделиться с друзьями:


Дата добавления: 2014-01-04; Просмотров: 281; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.006 сек.