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

1

わかりました。パラメータ名が原因でコードが読みにくくなり、理由がわかりにくくなったので、少し書き直してみましょう。

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

ここまでは順調ですね。がそれよりもhnow小さい場合や大きい場合は真ではないことがわかっています。hstarthend

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 に答える