1

我正在为 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)

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

你有什么想法?

4

2 回答 2

2

您真的应该更新到提供时间价值的 Pebble SDK2 time_t。该值是一个时间戳(自 epoch 以来的秒数),您可以在一次操作中轻松比较它。

于 2014-01-15T23:16:07.110 回答
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 ; }
于 2014-01-15T18:04:11.480 回答