русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Функции для сброса буферов


Дата добавления: 2013-12-23; просмотров: 2291; Нарушение авторских прав


Функции позицирования в файлах

При выполнении операций чтения - записи в файле требуется иногда перемещать указатель текущей позиции файла, например, при переходе от чтения к записи или наоборот (когда файл открыт в комбинированных режимах). Для перемещения указателя существуют специальные функции.

Функция для установки указателя текущей позиции в заданное положение:

int fseek(FILE * stream, long offset, int fromwhere);

параметры: stream – указатель на структуру FILE, offset – смещение в байтах указателя текущей позиции от позиции, заданной следующим параметром, fromwhere – возможные значения заданы константами: SEEK_SET – начало файла, SEEK_CUR – текущее положение указателя, SEEK_END – конец файла. Возвращаемое значение: 0, если функция нормально завершает свою работу, не 0 – в случае ошибки.

Функция для установки указателя текущей позиции в начало файла:

void rewind(FILE * stream);

параметр stream – указатель на структуру FILE.

Функция для получения текущего положения указателя позиции файла (смещение в байтах от начала файла):

long ftell(FILE * stream);

параметр stream – указатель на структуру FILE, функция возвращает текущее положение указателя.

 

Иногда требуется явно проводить сброс буфера ввода- вывода. В частности, эта операция обязательна при переходе от операции записи к операции чтения (при открытии файла в комбинированном режиме), чтобы записанные данные гарантированно оказались записаны в файле.

Функция сброса заданного буфера ввода- вывода:

int fflush(FILE * stream);

параметр stream – указатель на структуру FILE, функция возвращает 0 – в случае нормального завершения и EOF – в случае ошибки.

Функция сброса всех буферов ввода- вывода:

int flushall();

функция возвращает количество открытых потоков (входных и выходных), в случае ошибки возвращаемое значение не определено.



 

Далее приведены следующие примеры: запись двухмерного массива, созданного динамически, в файл в текстовом режиме; чтение этого массива из файла; запись массива структур в файл в двоичном режиме; чтение массива структур из файла в двоичном режиме.

Пример 1.

#include <stdio.h>

#include <stdlib.h>

void main()

{

// Программа создает двухмерный массив (матрицу) и

// записывает массив в файл

double **pM; // Указатель на массив указателей

int n, m; // Размерность массива

int i, j; // Индексные переменные

FILE *pF; // Указатель на "файл"

// Вводим размерность матрицы (двухмерного массива)

printf("n="); scanf("%d", &n); // Число строк

printf("m="); scanf("%d", &m); // Число столбцов

// Создаем массив динамически и заполняем его случайными числами

pM=malloc(n*sizeof(double *));

for(i=0; i<n; i++)

{

pM[i]=malloc(m*sizeof(double));

for(j=0; j<m; j++)

pM[i][j]=(rand() % 10000) / 100.; // В числе есть

// дробная часть

}

// Открываем файл для записи

pF=fopen("MyFile.txt", "w");

if (pF==0) // Ошибка открытия файла

{

printf("Error!!!");

return;

}

fprintf(pF, "%d %d\n", n, m); // Записываем размерности матрицы

// Записываем в файл массив (матрицу) по строчно через пробелы

for(i=0; i<n; i++)

{

for(j=0; j<m; j++)

fprintf(pF, "%f ", pM[i][j]);

fprintf(pF, "\n"); // Переход на новую строчку

}

fclose(pF); // Закрываем файл

}

 

Пример 2.

#include <stdio.h>

#include <stdlib.h>

void main()

{

// Программа читает двухмерный массив (матрицу) из файла и печатает его

// Файл с массивом должен быть в текущем рабочем каталоге!!!

double **pM; // Указатель на массив указателей

int n, m; // Размерность массива

int i, j; // Индексные переменные

FILE *pF; // Указатель на "файл"

// Открываем файл для чтения

pF=fopen("MyFile.txt", "r");

if (pF==0) // Ошибка открытия файла

{

printf("Error!!! File not found!");

return;

}

// Читаем размерность матрицы из файла

fscanf(pF, "%d %d", &n, &m);

// Создаем массив динамически

pM=malloc(n*sizeof(double *));

for(i=0; i<n; i++) pM[i]=malloc(m*sizeof(double));

// Читаем элементы массива из файла

for(i=0; i<n; i++)

for(j=0; j<m; j++)

fscanf(pF, "%lf", &pM[i][j]);

fclose(pF); // Закрываем файл

// Вывод массива на печать

for(i=0; i<n; i++)

{

for(j=0; j<m; j++) printf("%f ", pM[i][j]);

printf("\n");

}

}

Пример 3.

#include <stdio.h>

struct BOOK // Структура книга

{

char Title[64]; // Заголовок книги

char Author[64]; // Имя автора

char Firm[64]; // Издательство

int year; // Год издания

int page; // Число страниц

};

 

void main()

{

// Программа сохраняет массив структур в файле в двоичном режиме

int n=3; // Число элементов массива (может быть любым)

// Задаем массив структур

struct BOOK B[3]={{"Язык Си++: Учебное пособие", "Подбельский В.В.",

"М.: Финансы и статистика", 2008, 560},

{"Программирование на языке Си", "Подбельский В.В., Фомин С.С.",

"М.: Финансы и статистика", 2009, 600},

{"C++ : базовый курс", "Шилдт Г.", "М.: Издательский дом «Вильямс»",

2010, 624}};

FILE *pF; // Указатель на "файл"

// Открываем файл для записи в двоичном режиме

pF=fopen("MyFile.dat", "wb");

if (pF==0) // Ошибка открытия файла

{

printf("Error!!!");

return;

}

// Записываем в файл число элементов массива

fwrite(&n, sizeof(int), 1, pF);

// Записываем данные в файл сразу весь массив

fwrite(B, sizeof(struct BOOK), n, pF);

fclose(pF); // Закрываем файл

}

 

Пример 4.

#include <stdio.h>

#include <stdlib.h>

struct BOOK // Структура книга

{

char Title[64]; // Заголовок книги

char Author[64]; // Имя автора

char Firm[64]; // Издательство

int year; // Год издания

int page; // Число страниц

};

 

void main()

{

// Программа читает массив структур из файла в двоичном режиме

// Файл MyFile.dat должен быть в текущем рабочем каталоге!!!

int n; // Число элементов массива

int i; // Индексная переменная

// Задаем массив структур

struct BOOK * pB; // Указатель на массив структур

FILE *pF; // Указатель на "файл"

// Открываем файл для чтения в двоичном режиме

pF=fopen("MyFile.dat", "rb");

if (pF==0) // Ошибка открытия файла

{

printf("Error!!!");

return;

}

// Читаем из файла число элементов массива

fread(&n, sizeof(int), 1, pF);

// Выделяем память под массив струтур динамически

pB=malloc(n*sizeof(struct BOOK));

// Читаем данные из файла сразу весь массив

fread(pB, sizeof(struct BOOK), n, pF);

fclose(pF); // Закрываем файл

// Печатаем массив струтур

for(i=0; i<n; i++)

printf("\n%s %s %s - %d. %d", pB[i].Author, pB[i].Title, pB[i].Firm, pB[i].year, pB[i].page);

}

 



<== предыдущая лекция | следующая лекция ==>
Функции чтения из файла | Замены в тексте


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

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