1
#include <stdio.h>

int main(void)
{
  int days, hours, mins;
  float a, b, c, total, temp, tempA, tempB;

  a = 3.56;
  b = 12.50;
  c = 9.23;
  total = a+b+c;
  days = total / 24;

  temp = total/24 - days;

  hours = temp * 24;

  tempA = temp*24 - hours;

  mins = tempA*60;

  while (hours >= 24)
    {
      hours= hours-24;
      days +=1;
    }
  while  ( mins >= 60)
    {
      mins=mins-60;
      hours +=1;
    }
  printf("days:%d\n", days);
  printf("hours:%d\n", hours);
  printf("mins:%d\n", mins);


  return 0;
}

小数の時間をリアルタイムに変換したかったのですが、それは問題なく実行できますが、時間が24を超え、分が60分を超える場合は、日数を増やしたいと思いました。whileループは減算し、新しい値を出力しますが、時間/日は合成されません。1日1時間77分1日2時間17分読みたかったのですが、1日1時間17分です。

4

5 に答える 5

2

剰余演算子を使用すると、作業がはるかに楽になります。除算の余りが得られます。

int total;

/* a=; b=; c=; assignments */

total = a+b+c;
mins = total % 60;
total /= 60;
hours = total % 24;
days = total / 24;
于 2011-02-28T02:43:41.607 に答える
1

これがあなたがやろうとしていることのより簡単な実装です:

void TimeFix(int &days, int &hours, int &mins)
{
    hours += mins/60;
    mins %= 60;
    days += hours/24;
    hours %= 24;
}
于 2011-02-28T02:46:44.503 に答える
0

私が得ているあなたのプログラムを実行する:

days:1
hours:1
mins:17

合計が25.29であることを考えると、それが私が期待することです。

于 2011-02-28T02:42:40.967 に答える
0

それはうまくいきます、あなたの数学はほんの少しずれています。 (= (+ 3.56 12.50 9.23) 25.29)、26.29ではありません。

于 2011-02-28T02:43:14.690 に答える
0

whileループの代わりに、除算を使用できます。

days += hours / 24
hours %= 24

また、数時間から数時間の作業を、数時間から数時間の作業の前に行ってください。

于 2011-02-28T02:44:24.467 に答える