我有二进制文件,其中包含有关土地的信息。每件都有:
我必须创建读取二进制文件并填充链表的函数。
然后我必须按用户输入的坐标序列创建道路,直到输入-1。道路不能建在水上或建筑物上。这就是我一直奋斗了2天。
这是我的代码。 我想这不会那样,但我想不出别的什么
#include <stdio.h>
typedef struct Map
{
int height;
int type;
int att;
struct Map *next;
}Map;
Map* read(void)
{
FILE* file;
int i;
char fName[50];
printf("Enter the map's name (.bin): ");
scanf("%s",fName);
Map *head=NULL;
Map *curr=NULL;
Map cell;
if((file = fopen(fName, "rb"))==NULL) exit(1);
fread(&size_x, sizeof(int), 1, file);
fread(&size_y, sizeof(int), 1, file);
printf("size x: %d\n",size_x);
printf("size y: %d\n",size_y);
for(i = 0; i < size_x*size_y; ++i)
{
Map *temp;
temp=malloc(sizeof(Map));
if(head==NULL)
{
head=temp;
curr=temp;
}
curr->next=temp;
curr=temp;
fread(&cell,sizeof(Map),1,file);
temp->height=cell.height;
temp->type=cell.type;
temp->att=cell.att;
}
fclose(file);
return head;
}
void BuildRoad(Map* root)
{
//size_x and size_y read from the file
int matrix[size_x][size_y];
int i,j;
Map* curr_item = root;
while(curr_item!=NULL || (x!=-1 || y!=-1))
{
scanf("%d", &x);
scanf("%d", &y);
for(i=0;i<size_x; i++)
{
for(j=0;j<size_y; j++)
{
if((i==x && j==y) && (curr_item->type!=2 && curr_item->type!=4))
printf("[%d]", curr_item->type);
else if(curr_item->type==2 && curr_item->type==4)
printf("You can't build road on water or buildings\n");
else printf("[ ]");
}
printf("\n");
}
curr_item=curr_item->next;
}
}
int main()
{
Map *root=NULL;
root=read();
BuildRoad(root);
}
这就是我得到的 http://i.imgur.com/awRqLI4.jpg
Enter the map's name (.bin): 1
size x: 2
size y: 2
0 1
[ ][ ]
[ ][ ]
1 0
[ ][ ]
[1][ ]
1 1
[ ][ ]
[ ][ ]
0 0
[ ][ ]
[ ][ ]
1 1
Process returned -1073741819 (0xC0000005) execution time : 18.746 s
我希望它是这样的:
[1][3][2]
[0][1][1]
但我不知道如何做。