составные / в то время как петли - PullRequest
1 голос
/ 28 февраля 2011
#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 минут.

Ответы [ 5 ]

2 голосов
/ 28 февраля 2011

Использование оператора модуля упростит вашу жизнь: даст остаток от деления.

int total;

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

total = a+b+c;
mins = total % 60;
total /= 60;
hours = total % 24;
days = total / 24;
1 голос
/ 28 февраля 2011

Вот более простая реализация того, что вы пытаетесь сделать:

void TimeFix(int &days, int &hours, int &mins)
{
    hours += mins/60;
    mins %= 60;
    days += hours/24;
    hours %= 24;
}
0 голосов
/ 28 февраля 2011

Вместо цикла while вы можете использовать деление:

days += hours / 24
hours %= 24

Кроме того, делайте ваши минутные часы перед вашими ежедневными вещами.

0 голосов
/ 28 февраля 2011

Работает отлично, ваша математика совсем немного. (= (+ 3.56 12.50 9.23) 25.29), а не 26.29.

0 голосов
/ 28 февраля 2011

Запустив вашу программу я получаю:

days:1
hours:1
mins:17

и это то, что я ожидаю, учитывая, что общее количество должно быть 25,29.

...