Не считывается (или не записывается) бинарный файл, в чем проблема?
#include <iostream>
#include <stdio.h>
#include <string.h>
#define _CRT_SECURE_NO_WARNINGS
using namespace std;
void InputBinary(char* name);
void showStudents(char* name);
struct student {
struct {
char name[15];
char surname[15];
char patronimic[15];
} name;
int course;
char group[15];
struct {
int mark;
char subject[15];
} session[8];
double scholarship = 0;
};
int main() {
setlocale(LC_ALL, "UKR");
char name[99];
cin.getline(name, 98);
InputBinary(name);
showStudents(name);
system("Pause");
return 0;
}
void InputBinary(char* name) {
int count;
FILE* file = fopen(name, "ab");
cout << "Введіть кількість студентів\n";
cin >> count;
cin.get();
student *ToWrite = new student[count];
for (int i = 0; i < count; i++) {
cout << "Введіть Ім'я: ";
cin.getline(ToWrite[i].name.name, 14);
cout << "Введіть прізвище: ";
cin.getline(ToWrite[i].name.surname, 14);
cout << "Введіть по батькові: ";
cin.getline(ToWrite[i].name.patronimic, 14);
cout << "Введіть курс: ";
cin >> ToWrite[i].course;
cin.get();
cout << "Введіть назву групи: ";
cin.getline(ToWrite[i].group, 14);
cout << "Введіть предмет та оцінку\n";
for (int j = 0; j < 8; j++) {
scanf("%s %d", ToWrite[i].session[j].subject, &ToWrite[i].session[j].mark);
}
cin.get();
}
fwrite(ToWrite, sizeof(student), count, file);
fclose(file);
delete[] ToWrite;
}
void showStudents(char* name) {
FILE* file = fopen(name, "rb");
fseek(file, 0, SEEK_END);
int count = ftell(file) / sizeof(student);
student *students = new student[count];
fread(students, sizeof(student), count, file);
for (int i = 0; i < count; i++) {
cout << students[i].name.surname << " " << students[i].name.name << " " << students[i].name.patronimic << endl;
cout << "Група: " << students[i].group << endl;
cout << "Курс: " << students[i].course << endl;
cout << "Розмір стипендії: " << students[i].scholarship << endl;
cout << "Оцінки за останню сесію\n";
for (int j = 0; j < 8; j++) {
cout << students[i].session[j].subject << " : " << students[i].session[j].mark << endl;
}
cout << "-----------------------------\n";
}
fclose(file);
delete[] students;
}
Вы становитесь на конец файла:
fseek(file, 0, SEEK_END);
а затем читаете:
fread(students, sizeof(student), count, file);
Вернитесь в начало файла перед чтением!
Виртуальный выделенный сервер (VDS) становится отличным выбором
Дана строка, где слова разделены пробелами и двоеточиямиНужно посчитать количество слов длиной меньше k и вернуть контейнер этих слов
Под Windows есть функция создания нового процесса CreateProcess которая создает процесс в новом окне, и в нее можно передать флаг CREATE_NO_WINDOW, что бы это...