Запись и чтение текстовых файлов внешне очень похоже на консольный ввод/вывод (т.е. вывод на экран и ввод с клавиатуры). Его особенностью является то, что каждая переменная записывается и читается по отдельности. Для этих целей существует множество специализированных библиотечных функций для работы с переменными различных типов данных. Функции 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);