坐标序列

时间:2014-05-24 15:18:03

标签: c list linked-list

我有二进制文件,其中包含有关土地的信息。每件都有:

  1. 高度
  2. 类型 - 0表示草,1表示沙漠,2表示水3表示道路,4表示建筑物
  3. 出勤
  4. 我必须创建读取二进制文件并填充链表的函数。

    然后我必须按用户输入的坐标序列创建道路,直到输入-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]
    

    但我不知道如何做。

0 个答案:

没有答案