Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
#include <stdio.h>
int main()
{
FILE *ffseek (finin;
fin = fopen("text.txt","r");
setlocale(LC_ALL, "Russian");
if (!fin)
{
puts("Ошибка открытия файла");
return 1;
}
fseek(fin. 0. SEEK END);
long len = ftell(fin);
char *buf = new char[len + 1];
const int l block = 1024;
int num block = len/l block;
fseek(fin. 0. SEEK SET);
fread(buf. l block, num block + 1. fin);
buf[len] = '\0';
long n = 0, i = 0, j = 0;
while(buf[i])
{
if (buf[i] == '?')
{
for (j = n; j <= i; j++)
putchar(buf[j]);
n = i + j;
}
}
fclose(fin);
printf('\n");
return 0;
}
В операторе 1 определяется указатель на описанную в заголовочном файле <stdio.h> структуру FILE. Указатель именно такого типа формирует функция открытия файла fopen. Ее вторым параметром задается режим открытия файла. В данном случае файл открывается для чтения (г).
Файл можно открыть в двоичном (Ь) или текстовом (t) режиме. Эти символы записывают во втором параметре, например, "rb" или "rt". Двоичный режим означает, что символы перевода строки и возврата каретки (0x13 и 0x10) обрабатываются точно так же, как и остальные. В текстовом режиме эти символы преобразуются в одиночный символ перевода строки. По умолчанию файлы открываются в текстовом режиме.
Для позиционирования указателя текущей позиции используется функция f seek с параметрами, аналогичными соответствующему методу потока (операторы 3 и 7). Константы, задающие точку отсчета смещения, описаны в заголовочном файле <stdiо. h> и имеют имена:
SEEK_SET - от начала файла; SEEK_CUR - от текущей позиции; SEEK_END - от конца файла.
Чтение из файла выполняется функцией fread(buf, size, num. file) блоками по size байт. Требуется также задать количество блоков num. В программе размер блока задан в переменной равным 1024, поскольку размер кластера кратен степени двойки. В общем случае чем более длинными блоками мы читаем информацию, тем быстрее будет выполнен ввод. Для того чтобы обеспечить чтение всего файла, к количеству блоков добавляется 1 для округления после деления.
Вывод на экран выполняется посимвольно с помощью функции putchar.
Если требуется с помощью функций библиотеки вывести результаты выполнения программы не на экран, а в файл, в программе следует описать указатель на структуру FILE, с помощью функции fopen открыть файл для записи (второй параметр функции - w), а затем использовать этот указатель в соответствующих функциях вывода, например:
FILE *fout;
fout = fopen(textout.txt". "w");
setlocale(LC_ALL, "Russian");
if (Ifout)
{
puts("Ошибка открытия файла вывода");
return 1;
}
putc(buf[j], fout); // или fputc(buf[j], fout);
После окончания вывода файл закрывается с помощью функции fclose:
fclose(fout);
Смешивать в одной программе ввод-вывод с помощью потоковых классов и с помощью функций библиотеки не рекомендуется.
В целом программа, написанная с использованием функций библиотеки, может получиться более быстродействующей, но менее безопасной, поскольку программист должен сам заботиться о большем количестве деталей.
Дата публикования: 2015-10-09; Прочитано: 288 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!