我有一个家庭作业,说我必须在二进制文件中存储有关大厦的信息。在该文件的第一行,我必须保留有关建筑物中有多少楼层以及楼层有多少公寓(二维阵列大小)的信息。在下一行我必须保留有关公寓的信息 - 每间公寓的唯一编号,公寓内的房间数量,居住在那里的人数,姓氏,家庭搬进公寓的日期,月租金。 / p>
所以,问题是:我应该如何存储这些信息以及我该如何阅读?如果我使用fread(buf,size,number_of_elements,FIlE *),我怎么知道元素的数量? 例如,当我不知道它的长度时,如何阅读姓氏?
提前致谢!
PS。谢谢你,哗众取宠!我试着先将数据写入二进制文件,但我收到了一些错误:(
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#define NAPARTMENTS 21
#define TAX_ADULT 3
#define TAX_KID 1
#define TAX_ELEVATOR 2
#define NFLOORS 7
#define NROOMS 3
void main()
{
FILE *fp;
int i, j;
struct info_apartments
{
unsigned numApartment, numRooms, numAdults, numKids, rent;
char family[30], date[10];
};
typedef struct info_apartments data;
data apartments[7][3];
for(i=0; i<NFLOORS; i++)
for(j=0; j<NROOMS; j++)
{
apartments[i][j].numApartment=i*10+j+1;
printf("\nEnter the number of the rooms: ");
scanf("%d", apartments[i][j].numRooms);
printf("\nEnter number of adults: ");
scanf("%d", apartments[i][j].numAdults);
printf("\nEnter number of kids: ");
scanf("%d", apartments[i][j].numKids);
printf("\nEnter family name: ");
scanf("%s", apartments[i][j].family);
printf("\nEnter date: ");
scanf("%s", apartments[i][j].date);
//first two floors don't pay for elevator
if(i+1<3)
apartments[i][j].rent=(TAX_ADULT*apartments[i][j].numAdults)+(TAX_KID*apartments[i][j].numKids);
else
apartments[i][j].rent=((TAX_ADULT+TAX_ELEVATOR)*apartments[i][j].numAdults)+((TAX_KID+TAX_ELEVATOR)*apartments[i][j].rent);
}
if((fp=fopen("myfile", "ab"))==NULL)
{
printf("Error");
exit(1);
}
if((fwrite(apartments, sizeof(apartments), 1, fp))!=1)
{
printf("Error!\n");
exit(1);
}
}
答案 0 :(得分:1)
首先,我想你需要将最后的“if”行更改为:
if((fwrite(&apartments, sizeof(apartments), 1, fp))!=1)
你忘了把&amp; ..
第二......如果你愿意的话 从文件中读取你用fread函数做同样的事情
fread(&apartments, sizeof(apartments), 1, fp);
您可以打印它以便查看数据..
printf("%s",apartments[i][j].family);
OR
puts(apartments[i][j].family);
答案 1 :(得分:0)
考虑创建包含存储/检索所需信息的结构。标头结构看起来像
typedef struct
{
short floors;
short apartments;
} header;
你为文件的其他部分做了更多的结构。
然后当您从文件中读取(frwrite to write)时,您会执行类似
的操作header h;
fread( &h, sizeof(h), 1, fp );
现在使用标题中的信息可以计算出如何读/写文件的其余部分。对于文件的其余部分,您将拥有其他结构,但我留给您解决。