Создать структуру из двух полей: вещественное и целое. Записать в файл n компонент типа этой структуры
Создать структуру из двух полей: вещественное и целое. Записать в файл n компонент типа этой структуры. Переписать в другой файл последние К компонент из записанных в предыдущий файл.
Получилось вот это, нужно реализовать ещё это Переписать в другой файл последние К компонент из записанных в предыдущий файл.
#include <cstdlib>
#include <iostream>
#include <fstream>
#include <string.h>
#include <Windows.h>
using namespace std;
struct chisla {
float a;
int b;
};
void vvod(chisla nList[100], int n)
{
for (int i = 0; i < n; i++)
{
cout<< "Введите вещественное число: ";
cin>> nList[i].a;
cout<< "Введите целое число: ";
cin>> nList[i].b;
}
}
void vivod(chisla nList[100], int n)
{
for (int i=0; i<n; i++)
{
cout<< i+1<< ") ";
cout<< "Вещественное число: "<< nList[i].a<< "\n";
cout<< "Целое число: "<< nList[i].b<< "\n";
}
}
int zapis(char const * filename, chisla *st, int n)
{
FILE *f;
char *c;
// число записываемых байтов
int size = n * sizeof(struct chisla);
if ((f = fopen(filename, "wb")) == NULL)
{
perror("Ошибка при открытии файла");
return 1;
}
// записываем количество структур
c = (char *)&n;
for (int i = 0; i<sizeof(int); i++)
{
putc(*c++, f);
}
// посимвольно записываем в файл все структуры
c = (char *)st;
for (int i = 0; i < size; i++)
{
putc(*c, f);
c++;
}
fclose(f);
}
int vigrys(char const * filename, int n)
{
FILE *f;
char *c;
int m = sizeof(int);
int i;
// выделяем память для количества данных
int *pti = new int[m];
if ((f = fopen(filename, "r")) == NULL)
{
perror("Ошибка при открытии файла");
return 1;
}
// считываем количество структур
c = (char *)pti;
while (m>0)
{
i = getc(f);
if (i == EOF) break;
*c = i;
c++;
m--;
}
// выделяем память для считанного массива структур
struct chisla *ptr = new chisla[n];
c = (char *)ptr;
// после записи считываем посимвольно из файла
while ((i= getc(f))!=EOF)
{
*c = i;
c++;
}
// перебор загруженных элементов и вывод на консоль
for (int k = 0; k<n; k++)
{
cout<< k+1<< ") ";
cout<< "Вещественное число: "<< (ptr+k)->a<< "\n";
cout<< "Целое число: "<< (ptr+k)->b<< "\n";
}
fclose(f);
delete[] pti;
delete[] ptr;
}
void struc(void) {
int n;
cout << "Введите сколько будет списков: ";
while (!(cin >> n)){
cout << "error\n";
cin.clear();
fflush(stdin);
}
char const *filename = "f";
char *c;
chisla *nList = new chisla[n];
vvod(nList, n);
system("cls");
chisla *qList = new chisla[n];
std::copy(nList, nList + n, qList);
cout<< "Наша таблица: \n";
vivod(nList, n);
cout<< "Вывод из файла: \n";
zapis(filename, qList, n);
vigrys(filename, n);
delete[] qList;
delete[] nList;
system("pause");
}
int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
setlocale(LC_ALL,"Rus");
struc();
return 0;
}