Хелпикс

Главная

Контакты

Случайная статья





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));.



#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]);

else

{

 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, тому ми саме їх і обходимо.)

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

 



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.