将 if 语句与逻辑相关条件结合起来

标签 c if-statement nested-if

我也有这样的情况。

**更新了我的代码,它按照我想要的方式工作。 *按要求澄清了代码(完整程序)

如果我给

开始时间:2:30:30

停止时间:2:30:25

我应该得到

已过去:23:59:55

明白了吗?过了午夜……进入第二天……

这就是我想要的并且它有效!

我有这五个具有逻辑相关条件的 if 语句。

程序给出了所需的输出,但是是否可以以任何方式组合这些 if 语句(除了使用“OR”运算符和创建巨大的条件;例如嵌套 if 或条件运算符。

//time elapsed program
//including support for time crossing midnight into the next day
#include<stdio.h>

struct time
{
  int hour;
  int minute;
  int second;
};

struct time timeElapsed(struct time, struct time);

int main()
{
  struct time start, stop, elapse;

  printf("Enter start time (hh:mm:ss)  :  ");
  scanf("%d:%d:%d", &start.hour, &start.minute, &start.second);
  printf("Enter stop  time (hh:mm:ss)  :  ");
  scanf("%d:%d:%d", &stop.hour, &stop.minute, &stop.second);

  elapse = timeElapsed(start, stop);

  printf("The time elapsed is          :  %.2d:%.2d:%.2d", elapse.hour, elapse.minute, elapse.second);

  return 0;
}

struct time timeElapsed(struct time begin, struct time end)
{
  struct time elapse;

  if(end.hour < begin.hour)
    end.hour += 24;

  if(end.hour == begin.hour  &&  end.minute < begin.minute)
    end.hour += 24;

  if(end.hour == begin.hour  &&  end.minute == begin.minute  &&  end.second < begin.second)
    end.hour += 24;

  if(end.second < begin.second)
  {
    --end.minute;
    end.second += 60;
  }

  if(end.minute < begin.minute)
  {
    --end.hour;
    end.minute += 60;
  }

  elapse.second = end.second - begin.second;
  elapse.minute = end.minute - begin.minute;
  elapse.hour = end.hour - begin.hour;

  return elapse;
}

最佳答案

从逻辑上讲,您正在比较结束时间是否早于开始时间。

如果您可以通过保留顺序的映射将三个数字转换为一个,那么您将能够使用一次比较。

在这种情况下,转换为总秒数就很突出:

if (   end.hour * 3600L +   end.minute * 60 +   end.second
   < begin.hour * 3600L + begin.minute * 60 + begin.second )

这可能比您的原始代码更有效,也可能不更有效。如果您打算定期执行此操作,那么您可以创建一个内联函数将时间转换为总秒数。

关于将 if 语句与逻辑相关条件结合起来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41433998/

相关文章:

php - 如何将数组作为对象属性添加到 PHP 扩展中声明的类中?

c - 我在 CodeVisionAVR 中使用 ATmega164 的吉他调音器代码无法处理超过 4 个样本

百分比概率可以用 C 中的开关和范围来完成吗?

c++ - 我的升序排序问题是一个好的解决方案吗?

swift - Swift 中 Unresolved 标识符错误?

c - undefined symbol : PyExc_ImportError when embedding Python in C

c - 为什么这个 c 程序不打印第一个 printf 语句?

if-statement - 填写 ={ARRAYFORMULA()} 中的空白单元格

c++ - 有没有类似模板化案例陈述的东西

c++ - 如何退出for循环内嵌套的if-else语句?(C/C++)