如何访问struct数组中的值

时间:2014-10-29 14:28:41

标签: c arrays xcode structure

结构:

struct tod{
    int minute;
    int hour;
};
struct event
{
    int start, end;
}; 

数组:

int main (void)
{
    struct event schedule[] = {{{9,45},{9,55}},{{13,0},
        {14,20}},{{15,0},{16,30}}};
    printf ("%d\n", freetime (schedule,3,8,0));

}

为什么我安排[0]。我得到9而不是45? 或者安排[1]。然后我得到13而不是55.如何获得数组中的分钟值?开始时间不是第一组3个花括号吗?第二次设定结束时间?我不知道如何使用上面的结构来保存这些值。

这是我的代码

int freetime (struct event schedule[], int n, int hour, int min)
{
    struct tod time1;
    struct tod time2;
    int i;
    int result = 1;
    for (i=0; i<n; i++)
    {
        time1.hour = schedule[i].start;
        time1.minute = schedule[i].end;
        i++;
        time2.hour = schedule[i].start;
        time2.minute = schedule[i].end;
        if(hour >= time1.hour && hour < time2.hour)
        {
            if(min >= time1.minute && min < time2.minute)
            {
                result = 0;
                break;
            }
        }
    }
    return result;
}
如果指定的时间(小时和分钟)不是任何预定事件的一部分,

freetime应该返回1;否则返回0。值n指定包含计划的数组的大小。

3 个答案:

答案 0 :(得分:2)

您的事件结构应该如下所示:

struct event
{
    tod start, end;
}; 

当您尝试将tod存储在int中时。这导致您存储您的第一个时间&#39;在第一个事件中,第二个时间&#39;被插入你的第二个事件(等等)

试试这个,进行测试:

//returns true if tod1 comes before tod2
bool tod_before(tod tod1, tod tod2)
{
     return !((tod1.hour > tod2.hour) 
            || ((tod1.hour == tod2.hour) 
                && (tod1.minute > tod2.minute))
}


int freetime (struct event schedule[], int n, int hour, int min)
{
    struct tod test_time;
    struct tod time1;
    struct tod time2;
    int i;
    int result = 1;

    test_time.hour = hour;
    test_time.minute = min;

    //handle edge cases
    if (tod_before(test_time, schedule[0].start) || tod_before(schedule[n-1].end, test_time)
    {return 1;}

    //handle general case
    for (i=0; i<n-1; i++)
    {
        time1 = schedule[i].end;
        time2 = schedule[i+1].start;

        if (tod_before(time1, time) && tod_before(time, time2))
        {return 1;}
    }
    //if we get to here, then time wasn't found in a break
    return 0;
}

这假设每个事件都按顺序排列。

答案 1 :(得分:1)

替换

struct event schedule[] = {{{9,45},{9,55}},{{13,0},
        {14,20}},{{15,0},{16,30}}};

通过

struct event schedule[] =
{
    {9,45},
    {9,55},
    {13,0},
    {14,20},
    {15,0},
    {16,30}
} ;

答案 2 :(得分:0)

这里的基本问题是你的结构只包含两个变量,你有一个这种结构的数组。所以

struct event schedule[] = {{{9,45},{9,55}},{{13,0},{14,20}},{{15,0},{16,30}}};

的大小为3.并且您的计划,开始和& end初始化为集合中的第一个,即9,9 13,14 15,16 only。在这种情况下,schedule数组将有3个元素

 schedule[] = {{9,45},{9,55},{13,0}, {14,20},{15,0},{16,30}};

将初始化开始&amp;结束变量有9,15 9,55 13,0等等。在这种情况下,计划数组将有6个元素