Форматированный ввод/вывод (текстовые файлы)

Запись и чтение текстовых файлов внешне очень похоже на консольный ввод/вывод (т.е. вывод на экран и ввод с клавиатуры). Его особенностью является то, что каждая переменная записывается и читается по отдельности. Для этих целей существует множество специализированных библиотечных функций для работы с переменными различных типов данных. Функции fprintf() и fscanf() можно использовать вместо любой из этих функций, поскольку они универсальны, т. к. позволяют работать с данными любого типа. Интерфейс этих функций следующий:

int fprintf (FILE *уф, const char *управляющая_строка,...);

int fscanf (FILE *уф, const char *управляющая_строка,...);

где уф – указатель файла, возвращаемый в результате вызова fopen(). Операции ввода/вывода функции fprintf() и fscanf() выполняют с тем файлом, на который указывает уф. Иными словами, параметрами этих функций являются файловая переменная, управляющая строка и список вывода.

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

FILE *fp;

char FileName[16];

printf ("\n Enter file name ");

scanf ("%s", FileName);

fp = fopen (FileName, "wt");

if (fp == NULL) {

printf ("\n Error opening the file\n");

exit(1);

}

fprintf (fp, "%5d%5d\n", N, M); // запись размерности

for (int i = 0; i < N; i++)

{

for (int j = 0; j < M; j++)

fprintf (fp, "%5d", Mas[i][j]); // запись матрицы

fprintf (fp, "\n");

}

fclose (fp);

Далее приведём аналогичный фрагмент программы для чтения матрицы из файла. Данные должны читаться в том же порядке, что и записывались: сначала размерность, затем сама матрица.

FILE *fp;

char FileName[16];

printf ("\n Enter file name ");

scanf ("%s", FileName);

fp = fopen (FileName, "rt");

if (fp == NULL) {

printf ("\n Error opening the file\n");

exit(1);

}

fscanf (fp, "%d%d ", &N, &M); // чтение размерности

for (int i = 0; i < N; i++)

for (int j = 0; j < M; j++)

fscanf (fp, "%d", &Mas[i][j]); // чтение матрицы

fclose (fp);


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: