- •Подготовка программы к исполнению
- •Директива препроцессора #include
- •Математические функции из библиотеки cmath
- •Заголовок функции main
- •Объявление переменных.
- •Объявление переменных простого типа
- •Объявление констант простого типа
- •Перечисляемые переменные.
- •Логические операции
- •Операторы
- •Операторы сложные
- •Составной оператор
- •Структурированные операторы
- •Условный оператор.
- •Блок-схема оператора разветвления
- •Условная операция.
- •Операция «запятая» в операторе if.
- •Преобразование и привидение типов.
- •Оператор выбора варианта.
- •Блок-схема оператора варианта
- •Цикл по счётчику
- •Цикл c предусловием.
- •Цикл c постусловием.
- •Операторы передачи управления
- •1) Спецификации формата, которые определяются символом % - для выделения, контроля и преобразования соответствующих им введенных значений;
- •2) Любые символы, которые могут быть во входном потоке и которые надо игнорировать:
- •2) Первого символа, который не соответствует формату (например, буква или пробел после выделения числа); .
- •3) Заданной длины поля вводимого значения, если она определена в формате.
- •4.2.2. Форматы вывода данных
- •1) Спецификации формата, которые определяются символом % - для вывода .Значений, определенных списком аргументов, если они есть;
- •2) Любые символы, которые должны быть выведены в выходной поток;
- •2 Позиции отводятся для знака числа и точки.
- •Составные типы данных
- •Обработка двумерного массива
- •Указатели
- •Порядок выполнения операций над указателями
- •Арифметические операции над адресами
- •Операторы распределения памяти new и delete
- •Указатели и динамические массивы
- •Указатели и спецификатор const
- •Массивы указателей
- •Организация динамического двумерного массива
- •Функции работы со строками
- •Действия, производимые над строками и их правила Присвоение
- •Конкатенация строк
- •Копирование строк
- •Определяет длину строки
- •Указатели и строки
- •Введение в класс string
- •Структуры
- •Ссылочные переменные
- •Функции
- •Функции, имеющие возвращаемый параметр с помощью оператора return.
- •Объявление формальных параметров
- •Ввод - вывод записей
- •Дополнительные возможности работы с файлами
- •Работы с файлами и стандартный класс mfc cFileDialog.
- •Работа с файлами с помощью mfc( классы cFile, cStdioFile, ... ) и стандартный класс mfc cFileDialog.
- •Класс cFile
- •Класс cMemFile
- •Класс cStdioFile
- •Примеры записи и чтения из файла
Ввод - вывод записей
Функции С++ позволяют обмен данными с файлами последовательной и прямой организации, состоящими из записей фиксированной длины. При этом за одно выполнение одной функции в.в данных записями пересылаются одна и более записей. Запись представляется в виде одной переменной любого типа, кроме файлового. Переменная запись определяется программистом. При в/в данных записями надо использовать бинарные режимы доступа в операторах открытия файлов: wb, rb, ab, ab+.
При чтении записей из файла происходит их ввод в ОП, который производится функцией fread. Прототип функции ввода записей:
int fread (void * DstBuf, unsigned Size, int К, FILE *stream);
Где: DstBuf –по адресу указателя переменной любого типа (записи) в ОП куда помещается запись, прочитанная из файла;
Size – длина записи в байтах, определяется функцией sizeof(тип);
К – количество считываемых записей из файла размером Size;
stream – имя указателя, связанного с файлом для чтения.
Функция fread читает К записей длины Size из входного потока stream и помещает их по адресу DstBuf (структуры). После этого указатель файла, связанный с потоком stream, увеличивается на количество прочитанных байтов = Size * К, и функция fread готова прочесть из файла следующую группу байтов. Чтение из файла происходит от нулевого элемента, до символа конца файла. Функция fread возвращает результат целого типа, который является результатом анализа конца файла:
если результат = 1 (истина) запись считана;
если результат = 0 (ложь) запись не считана, обнаружен конец файла.
Пример:
#include <stdio.h>
#include <iostream>
using namespace std;
FILE * fp;
struct stud
{int nz;
char fio[20];
float rs;} zapst;
char str[80];
char fn[20] = "ffff.dat";
void main ()
{
if (fp = fopen (fn, "rb"))
while(fread(&zapst,sizeof(stud),1,fp))
{
str[0]='\0';
sprintf_s(str," %8d | %10s | %8.2g ",zapst.nz,zapst.fio,zapst.rs);
cout<<str<<'\n';
}
}
Вывод записей из ОП в файл производится функцией fwrite. Прототип фунции:
int fwrite (const void * DstBuf, unsigned Size, int К, FILE *stream);
Назначение формальных параметров функции fwrite аналогично параметрам функции fread. Функция выводит К записей из ОП по адресу переменной DstBuf в файл, связанный с указателем . Указатель файла, связанный с потоком , увеличивается на количество выведенных байтов и устанавливается на позицию с которой можно производить следующий вывод записи в файл или признака конца файла.
Возвращаемое значение:
Целый тип возвращаемого параметра определяет количества записей, реально помещенных в файл. Если это меньше К, то имела место ошибка.
Пример:
FILE * fp;
struct stud
{int nz;
char fio[20];
float rs;} zapst;
fwrite(&zapst,sizeof(stud),1,fp);
Пример представляет весь проект:
#include <stdio.h>
#include <iostream>
using namespace std;
FILE * fp;
struct stud
{int nz;
char fio[20];
float rs;} zapst;
char *sh[3] = {" cbedehia o ctudentax ",
" homep z k | F.I.O | ctepehdia ",
"============================================"};
char str[80];
char fn[20] = "ffff.dat";
void main ()
{
cout <<"bbedite name file: \t "<<fn<<endl;
//cin>> fn;
fp = fopen (fn, "wb");
cout<<"NEW FILE\n";
cout<<"nz:/t ";cin>>zapst.nz;
cout<<"fio:/t ";cin>>zapst.fio;
cout<<"rs:/t ";cin>>zapst.rs;
fwrite(&zapst,sizeof(stud),1,fp);
fclose(fp);
for(int i = 0; i < 3; i++)
cout<<sh[i]<<endl;
if (fp = fopen (fn, "rb"))
while(fread(&zapst,sizeof(stud),1,fp))
{str[0]='\0';
sprintf_s(str," %8d | %10s | %8.2g ",zapst.nz,zapst.fio,zapst.rs);
cout<<str<<'\n';
}
fclose(fp);
cout<<"ADD FILE\n";
if (fp = fopen (fn, "ab"))
{cout<<"ENTER \n";
while (getch() == 13)
{
cout<<"nz:/t ";cin>>zapst.nz;
cout<<"fio:/t ";cin>>zapst.fio;
cout<<"rs:/t ";cin>>zapst.rs;
fwrite(&zapst,sizeof(stud),1,fp);
cout<<"ENTER / ESC \n";
}
}
fclose(fp);
if (fp = fopen (fn, "rb"))
while(fread(&zapst,sizeof(stud),1,fp))
{str[0]='\0';
sprintf_s(str," %8d | %10s | %8.2g ",zapst.nz,zapst.fio,zapst.rs);
cout<<str<<'\n';
}
fclose(fp);
}
Работа с файлом в режимах записи, добавления и чтения через один поток
#include "stdafx.h"
#include <conio.h> //kbhit()
#include <iostream>
using namespace std;
int main(void)
{
FILE * fsio; // FileStreamInputOutput
char fname[13] = "tstfile.txt";
char rbuf[81] = "";
fsio = fopen(fname, "wt");
fprintf(stdout,"Open file %s in regime 'wt'\n", fname);
fprintf(fsio,"Example of work with file;\n");
for (int i = 2; i<17; i++)
fprintf(fsio,"\n%i line.", i);
fclose(fsio);
fsio = fopen(fname, "at");
fprintf(stdout,"Open file %s in regime 'at'\n", fname);
for (int i = 1; i<17; i++)
fprintf(fsio,"\n%i added line.", i);
fclose(fsio);
fsio = fopen(fname, "rt");
fprintf(stdout,"Open file %s in regime 'at'\n", fname);
printf("\nContent of file %s:\n", fname);
while(!feof(fsio))
{
fscanf(fsio,"%s",rbuf);//считывается только очередное слово
fprintf(stdout,"next word: %s\n",rbuf);
while(!kbhit())
{
if (getch()!=27) break;
else
{
puts("\nQuit by ESC...");
fclose(fsio);
return 0;
}
}
}
fclose(fsio);
puts("\nProgram done...");
return 0;
}
Работа с текстовым файлом
#include "stdafx.h"
#include <iostream>
using namespace std;
int main(void)
{
FILE *pfs; //PointerFileStream,
char rbuf[127] = "";
pfs = fopen("dat.txt", "wt");
fputs(strcpy(rbuf,"Example of work with file.\n"), pfs);
fputs(strcpy(rbuf,"Last line of file."), pfs);
puts("Two lines was writed in file dat.txt.");
fclose(pfs);
pfs = fopen("dat.txt", "rt");
puts("\nContent of file 'dat.txt':");
while(!feof(pfs))
{
fgets(rbuf, sizeof(rbuf)-1, pfs);
printf("next line: %s", rbuf);
}
fclose(pfs);
puts("\nProgram done...");
return 0;
}