Как вывести массив структур через fread(). 1 код для ввода структуры, а во втором я не могу вывести массив структур, пользуясь fread()
1 код
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
int main()
{
FILE *fd;
char name[10];
gets(name);
fd=fopen(name, "w");
struct A
{
int a;
int b;
char c;
};
A mass[100];
int i;
for(i=0; i<3; i++)
{
scanf("%s%s%s", &mass[i].a, &mass[i].b, &mass[i].c);
}
for(i=0; i<3; i++)
{
fwrite(&mass[i], sizeof(mass[i]),1,fd );
}
fseek(fd,0, SEEK_END);
cout<<ftell(fd)<<endl;
system("pause");
fclose(fd);
}
2 Код
_______________________
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
int main()
{
FILE *fd;
char name[10];
int num_mass, num_fd, num, *p;
gets(name);
fd=fopen(name, "r");
fseek(fd,0, SEEK_END);
num_fd=ftell(fd);
fseek(fd, 0, SEEK_SET);
cout<<num_fd<<endl;
struct A
{
int a;
int b;
char c;
};
num_mass=sizeof(A);
cout<<num_mass<<endl;
num=num_fd/num_mass;
cout<<num<<endl;
A *mass=new A[num];
int i;
fread(&mass, sizeof(mass),1, fd);
printf("%d\t%d\t%s\n", mass[i].a,mass[i].b,mass[i].c );
fseek(fd,0, SEEK_END);
cout<<ftell(fd)<<endl;
system("pause");
fclose(fd);
}
Ответы (2 шт):
Автор решения: DmitryK
→ Ссылка
Файл нужно открывать для чтения и записи в бинарном режиме. Цикл можно не использовать - функции принимают количество элементов для записи/считывания
fd=fopen(name, "wb");
fwrite(mass, sizeof(mass[0]), num, fd);
fd=fopen(name, "rb");
fread(mass, sizeof(mass[0]), num, fd);
И зачем 2 отдельных программы?
Автор решения: DmitryK
→ Ссылка
Вот тестовая программа - файловый ввод/вывод работает. Значит у вас где-то ещё ошибка. С ручным вводом заранее никогда не скажешь. Пробуйте в отладочном режиме.
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
struct A
{
int a;
int b;
char c;
};
int main()
{
FILE *fd;
char* name = "f001.bin";
int size = 3;
A mass[size] = {
{ 1, 2, 'a'},
{ 3, 4, 'b'},
{ 5, 6, 'c'}
};
A mass1[size];
fd=fopen(name, "wb");
fwrite(mass, sizeof(mass[0]), size, fd);
fclose(fd);
fd=fopen(name, "rb");
fread(mass1, sizeof(mass1[0]), size, fd);
fclose(fd);
for(int i=0; i<size; i++)
{
cout<< mass1[i].a << " " << mass1[i].b << " " << mass1[i].c << "\n";
}
}