- •Int fact(int n)
- •Int fact(int n)
- •Void main()
- •Void main()
- •Void main()
- •Int AkkR(int m, int n);
- •Int main()
- •Int AkkR(int m, int n)
- •Int main()
- •Int smacc(int, int);
- •Int test(char *s, char *r)
- •Void main() { Stepp(""); }
- •Int step(int X, int y)
- •If (step(X-1, y))
- •If (step(X, y-1))
- •Void main(void)
- •Void main()
- •Int rings;
- •Init(rings);
- •Void convert (int z)
- •Void f(struct man *q)
- •Int mark[4];
- •Void main()
- •Void proc(man *p)
- •Void main()
- •Void main()
- •Int telephon;
- •Void main()
- •Void fNumber(number * const doc)
- •Void main()
- •Int main()
- •Void main()
- •Void main()
- •Void main()
- •Int fgets (char *s, int m, file *f);
- •Int fputs (char *s, file *f);
- •Void main()
- •Int fread( void *ptr, int size, int n,
- •Int fwrite( void *ptr, int size, int n,
- •Int rate;
- •Void main()
- •Int fseek(file *fp, long pos, int mode);
- •Void main()
- •Int np, n, I; long p[5]; char str[80];
- •Void main()
- •Int main() {
- •Int fread (void *buf, int size, int nrec, file *fd);
- •Int fwrite (void *buf, int size, int nrec, file *fd);
- •Int main()
- •Int main()
- •Infl.Open(“a.Txt”);
- •If (!infl) … //открытие успешно
- •Int main()
- •Inout.Seekg(0);
- •Int main()
- •Void main()
- •Void main()
- •Void main(void)
- •Ifstream prm2("a.Txt") ;
- •If (prm2.Fail())
Void main()
{ setlocale(LC_CTYPE, "Russian");
int i, d, m, y;
for(i = 0; i < 2; i++) //2 сотрудника
{ cout<< endl<<"Фамилия:"<<endl;
cin>>S[i].Name;
cout<<"Номер отдела: "<<endl;
cin>>S[i].Dep;
cout<<"День найма:"<<endl;
cin>>d;
S[i].Priem.nDay = d;
cout<<"Месяц найма:"<<endl;
cin>>m;
S[i].Priem.nMonth = m;
cout<<"Год найма:"<<endl;
cin>>y;
S[i].Priem.nYear = y;
cout<<endl;
cout<<"Сотрудник: "<<S[i].Name <<endl;
int n = S[i].Dep;
cout<<"Отдел:"<<NameDep(n)<<endl;
cout<<"Дата найма: "<<S[i].Priem.nDay << "."<<S[i].Priem.nMonth<<"."<<
S[i].Priem.nYear<<endl;
}
}
Файловый ввод/вывод
Файл – это набор данных, размещенный на внешнем носителе и рассматриваемый в процессе обработки как единое целое.
Работа с файлами на языке С
Текстовые файлы (последовательного доступа) - последовательность ASCII символов
Бинарные файлы (двоичные, произвольного доступа) - структура определяется программно.
Каждый файл завершается маркером конца файла (end-of-file marker или EOF) или указанным числом байтов, записанным в служебную структуру данных поддерживающей системы.
Когда файл открывается, то создается объект (структурированная переменная, содержащая информацию о файле) и с этим объектом связывается файловый поток.
Файловый поток – это файл вместе с предоставленными средствами буферизации.
Потоки можно:
открывать и закрывать;
вводить и выводить строки, символы, форматированные данные, порции данных произвольной длины;
анализировать ошибки ввода/вывода и достижения конца файла;
управлять буферизацией потока и размером буфера;
получать и устанавливать указатель текущей позиции в файле.
Прежде чем начать работать с потоком, его надо инициировать (открыть).
При этом поток связывается со структурой FILE, определение которой находится в библиотечном файле <stdio.h>.
В структуре FILE находится указатель на буфер, указатель на текущую позицию файла и т.п.
type struct
{ short level; //число оставшихся в буфере непрочит. байт (размер буфера 512 байт)
unsigned flags; //флаг статуса файла: чтение, запись, дополн.
char fd; //дескриптор (номер) файла
unsigned char hold; //непереданный символ
short bsize; //размер внутр. промежут. буфера
unsigned char buffer; //знач. указателя для доступа внутри буфера
unsigned char *curp; // тек. знач. указат. для доступа внутри буфера
unsigned istemp; //флаг временного файла
short token; //флаг при работе с файлом
} FILE;
Для открытия файла используется функция
fopen(<имя_файла>, <режим_открытия>)
При открытии потока возвращается указатель на поток, т.е. на объект типа FILE:
#include <stdio.h>
Int main()
{ …………
FILE *fp; //дескриптор
………
fp = fopen(“t.txt”, ”r”);
………
Здесь файл находится в папке примера.
Если файл расположен в другом месте, то надо указывать полный путь к нему:
“F:\p1\p2\a.txt”
Режимы открытия файла
Режим |
Описание |
”w” |
открыть файл для записи (если файл сущ., то он стирается) |
”r” |
открыть файл для чтения |
”a” |
открыть файл для добавления (если файл сущ., то он не стирается), запись информации в конец файла |
”w+” |
открыть файл для записи и исправления (если файл сущ., то он стирается), можно читать и записывать данные, размеры файла можно увеличивать |
”r+” |
открыть файл для чтения и записи, увеличить размер файла нельзя |
”a+” |
открыть файл для добавления, т.е. можно читать и писать, в том числе и в конец файла |
Поток можно открыть в текстовом (t) или двоичном (b) режиме. По умолчанию устанавливается текстовый режим.
В явном виде режим указывается следующим образом: ”r+b” или ”rb” – двоичный (бинарный) режим.
Если открытия файла не произошло, то функция fopen вернет NULL.
После работы с файлом его надо закрыть с помощью функции:
fclose ( <указатель на поток> );
Она разрывает связь структурированной переменной с файлом и записывает в память оставшееся содержимое буфера.
Пример
#include <stdio.h>
……………….
FILE *fd;
fd = fopen("aaa.txt", "r");
if (fd == NULL)
printf("Файл не открыт\n");
else
{ fscanf(fd, ....);
. . . . . . . . . . . . . .
fclose(fd);
}
Если требуется изменить режим доступа к файлу, то надо закрыть файл, а затем вновь его открыть, но с другими правами доступа.
В новых версиях Visual Studio надо использовать функцию, общий вид которой:
fopen_s( FILE** pFile, const char *filename, const char *mode)
Здесь pFile указатель на файловый указатель, filename имя файла, mode режим открытия файла.
Для закрытия нескольких файлов введена функция: void fcloseall(void);
Для этого используют станд. функцию: FILE *freopen(char*имя_файла, char *режим, FILE *дескриптор_файла);
Эта функция сначала закрывает файл, объявленный дескриптором (как это делает функция fopen), а затем открывает файл с именем_файла и правами доступа .
Основные функции для работы с файлами
Ввод-вывод:
форматированный – fscanf, fprintf;
построчный – fgets, fputs;
посимвольный – fgetс, fputс;
блоками – fread, fwrite
Форматированный ввод-вывод
int fscanf (FILE *f, char *формат, список адресов объектов) //считывание
int fprintf (FILE *f, char *формат, список объектов) //запись
Пример
#include <iostream>
#include <stdio.h>
using namespace std;