结构比较

时间:2014-01-15 17:52:19

标签: c struct comparison pebble-watch

我正在为Pebble平台开发一个项目。应用程序是用C语言编写的,我的问题并不是针对该平台的。

Pebble API有一个名为PblTm的结构,每秒都会被一行代码填充。我的目标是将结构与当前时间进行比较。我创建了PblTm结构并用我需要比较的时间填充它们。我只关心结构的小时和分钟部分。到目前为止,我有以下代码。

bool comp_time(int h1, int m1, int h2, int m2, int h3, int m3) {

    if((h1<=h2)  && (h2<=h3)) //Is start hour <= now hour <= end hour?
    {
        if((h1=h2) && (m2>=m1)) //If start hour = now hour, is now min >= start min ?
        {
            return true; 
        }
        if((h2=h3) && (m2<=m3)) //If end hour = now hour, if now min <= end min?
        {
            return true;
        }
        if((h1>h2) && (h2<h3)) //If start hour < now hour < end hour?
        {
            return true;
        }
    }
    else
    {
        return false;
    }
    return false;

}

我最初尝试将结构本身作为参数提供给函数,如:

comp_time(&first_start,&now,&first_end);

然后引用函数内部结构的元素,我永远无法编译,我无法找到它的信息。 (我可能没有一直在寻找正确的术语)。

然后我改为将int参数提供给函数本身,如下所示:

comp_time(first_start.tm_hour,first_start.tm_min,now.tm_hour,now.tm_min,first_end.tm_hour,first_end.tm_min)

这是一种非常笨拙的方式,但我已经完成了所有工作。然而,我的主要问题是比较功能不起作用。它返回(显然是随机的,我无法找到一个模式)对于不适合的值,对于某些适合的值,则返回false。

你有什么想法吗?

2 个答案:

答案 0 :(得分:2)

你应该真正更新到Pebble SDK2,它提供time_t时间值。此值是时间戳(number of seconds since epoch),您可以在一次操作中轻松比较它。

答案 1 :(得分:1)

好的,所以你的参数名称使得阅读代码和理由非常困难,所以让我们重写一下:

bool comp_time(int hstart, int mstart, int hnow, int mnow, int hend, int mend) {
  if (( hstart <= hnow ) && ( hnow <= hend ))
  {

到目前为止一切顺利。我们知道如果hnow小于hstart或大于hend,那么它就不是真的。

if((hstart==hnow) && (mnow>=mstart)) return true ;  // BAD

除了==而不是=的修正,这仍然是错误的。你只测试边界的一边。您需要针对startend进行测试,以确保您在范围内:

if ( ( (hstart < hnow ) || (mstart <= mnow ) ) &&
    ( (hnow < hend) || (mnow <= mend ) ) )  { return true ; }