Website Summary Files Commits Branches @commit @diff @stats
path: root / k_1_SI / task2_read.cpp
blob: e6a8312b8be338e6ebfc03ef8cb862ac1effd57f (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;

const size_t MAX_NAME_SIZE = 22;
struct Student
{
	//gender should be BEFORE fn so the struct would be 28 bytes.
	char name[MAX_NAME_SIZE + 1];
   	bool isMale;
	size_t fn;
};


size_t getFileSize(ifstream& f)
{
	size_t currentPos = f.tellg();
	f.seekg(0, ios::end);
	size_t size = f.tellg();
	
	f.seekg(currentPos);
	return size;
}

void readFromFile(Student*& ptr, size_t& studentsCount, ifstream& f)
{
	size_t sizeOfFile = getFileSize(f);
	studentsCount = sizeOfFile / sizeof(Student);
	ptr = new Student[studentsCount];
	f.read((char*)ptr, sizeOfFile);
}


int main()
{
	Student* arr;
	size_t count;
	ifstream file("students.dat");
			
	if(!file.is_open())
	{
		std::cout << "Error while opening the file!" << std::endl;
		return -1;
	}
		
	readFromFile(arr, count, file);

	for (int i = 0; i < count; i++)
		std::cout << "Name: " << arr[i].name << ", fn: " << arr[i].fn << ", is male: " << arr[i].isMale << std::endl;
	
	delete[] arr;
	
	return 0;
}