2016-01-29 44 views
1

我对C++没有任何经验,所以我有点困惑 - 我正在参加一个高中的编程课,当我们几乎不了解任何C++时,我们需要完成这项任务或一般的编程技巧。C++计算两次之间的时间量

我应该写一个程序,以24小时格式读取一个事件的开始和结束时间。然后我需要打印已经过去的小时数和分钟数。

ex 1: 
first time: 0800 
second time: 1705 
time elapsed: 9 hr and 5 min 

ex 2: 
first time:0900 
second time: 0800 
time elapsed: 23 hr 0 min 

我们应该把它们分为两种不同的情况(即在第一次是第二次,反之亦然之前 - 我们都应该是治疗这两种情况下以同样的方式)。如果没有if语句,有没有办法做到这一点?这将是理想的,因为我们还没有学到它们。

这是我到目前为止有:上发布这样一个良好的书面质询

int main() : { 

    int first_time; 
    int second_time; 
    int dif_time; 

    std::cout << "Enter first time" << endl; 

    std::cout << "Enter second time" << endl; 

    difference = second_time - first_time; 

    double mod_time = difference % 60; 

} 
+0

为什么任意限制“不使用'if'” - 是否在您的任务中特别说明?你允许使用三元表达式吗? (这不是'if',但是也是这样,查看它。) – usr2564301

+1

您在发布的代码中有几个错误。在main()后有一个额外的':',并且'difference'没有被声明,你不会在返回'int'的函数中返回一个值... – apriori

+0

什么样的类期望你做一个任务没有教授任务所需的任何概念?你至少有一本教科书? – Barmar

回答

1

祝贺。你清楚地考虑了一下,表明你已经做了一些工作。

如果不允许if语句使用,你的其他选择:

  • 三级运营商?:

  • abs()函数返回绝对值

  • 计算两个时间差异。一个假设第一次更大。另一个 - 假设第二次更大。然后使用std::max()取两个结果中较大的一个。

由于这是一项家庭作业,我不会提供更多详细信息。如果您需要更多帮助,可以通过编辑问题来提问。

+0

另一种选择:'std :: max'或'std :: min' – Gene

+0

谢谢Gene,Gene。我添加了这个选项。 – George

1

如果您确实想要避免 if s,您可以计算时差的绝对值。 增加24小时差异,然后以24小时为单位对差值进行取模。

另外,如果你打算以该格式输入,mod 60会给你错误的答案,因为100 % 60 == 40

+0

差异的绝对值会给出错误的结果。如果start是'0900'而end是'0800',那么绝对值就是1小时,而不是23小时。 – Barmar

+0

没有注意到这个例子。固定。 – user2475059

+0

正如我所理解的问题本身,0900开始和0800结束不可能在这里表示,因为规范表明提供时间的顺序是不相关的 - “(第一次是在第二次之前时间,反之亦然 - 我们应该以同样的方式对待这两种情况)“ –

1

编辑:它从您的示例输出中看出,对于第二次在第一次之前的情况,您应该将其视为第二次实际上是第二天的时间。

在这种情况下,请考虑总是将时间差加上24小时,然后使用模运算将时间限制在24小时以下。



这是我的文章的编辑前内容:

你可以利用的事实,即布尔表达式导致0(假)或1(真)。例如:

delta = 24 * (time < 0); 
time += delta; 

但是,这只是在罕见的情况下选择的选项。除非你的课程已经讨论过这种可能性,否则你可能不应该将这个概念用于作业。