从指针访问结构

时间:2017-09-18 01:56:14

标签: c pointers struct

嗨我需要帮助,如何将g分配给“assign_guest_at”中的特定座位,以便我可以检查它是否有更多条件(问题如下所述)。

该功能尝试将“g”分配给座位 “row”和“col”(由此参数指定 功能)。如果座位有默认的客人,即客人 姓氏“???”然后是第一个名字“???” 我们可以将新客人“g”分配给该座位和 方法返回true。否则,这个座位被认为是 由其他人采取,该方法不分配 客人返回0(假)。

 struct guest {
        char last_name[30];
        char first_name[30];
    };
    struct auditorium_seating {
        struct guest **seating;
    };
    void guest_init(struct guest *g, char *info) 
    {
        char *token;
        token = strtok(info, "/");
        strcpy(g->first_name, token);
        token = strtok(NULL, "\0");
        strcpy(g->last_name, token);

    }
    int assign_guest_at(int row, int col, struct auditorium_seating *a, struct guest* g)
    {

        if (a->seating[row][col] == "???")
        {


            return 1;
        }
        else
        {
            return 0;
        }
    }

2 个答案:

答案 0 :(得分:1)

为了比较C中的字符串,在命名 strcmp 中有一个函数,它比较两个字符串,如果它们相等则返回0。

要在结构中使用它,您应该使用默认的访客逻辑对每个字段执行此操作。

我认为以下代码可以满足您的需求:

int assign_guest_at(int row, int col, struct auditorium_seating *a, struct guest* g)
{

    if ( strcmp(a->seating[row][col].first_name, "???") == 0 && 
            strcmp(a->seating[row][col].last_name, "???") == 0)
    {
        a->seating[row][col] = *g;
        return 1;
    }
    else
    {
        return 0;
    }
}

答案 1 :(得分:0)

不确定你的意思是什么“???”。但是如果我们知道它是一个字符数组(也许在初始化时分配),那么下面的代码片段实现了你的功能:

int assign_guest_at(int row, int col, struct auditorium_seating *a, struct guest* g)
{
    if (!strcmp(a->seating[row][col].last_name, "???")  
        && !strcmp(a->seating[row][col].first_name, "???"))
        {
        memcpy(&a->seating[row][col], g, sizeof (struct guest));
        return 1;
        }
    return 0;
}

该函数检查[row] [col]中的座位是否有默认的guest虚拟机(如上所述,其中“???”字符串附加到last_name& first_name),如果是这种情况,座位*g被复制到其中。