一个小时后 returns 的函数代码 - 面试问题

Code for a function that just returns after an hour -interview question

我在网上看到这个问题是在面试的时候:

假设你有这个代码:

void myFunction(){
  int time = clcTime();
  while (clcTime()-time!=3600);  
}

clcTime() 是 return 自今天 00:00 以来经过的秒数的方法。

(1)。查找此代码段的作用。
(2).一些 QA 测试人员说这段代码在特定情况下失败。那是什么情况?您如何解决该问题?
(3).另一位 QA 测试员表示这段代码在白天运行良好,但当他入睡时 - 出了点问题。可能是什么问题以及如何解决?

我的尝试:
对于(1),我认为这个函数只是假设 运行 循环一个小时。
对于 (3),我认为问题是当一天中的当前小时在 [23:00:00,23:59:59] 范围内时 time 变量获取其值。那是因为在那种情况下,time 的值将在 [23*3600,23*3600 + 3599] 范围内,而 clcTime() 不能 return 范围内的匹配值 [24*3600, 24*3600 + 3599] .所以在那种情况下,我们知道条件 'clcTime()-time' 永远不会得到 3600 的值,我们将得到一个无限循环。

我的解决方案是将 while 行替换为以下行:

int measure = clcTime() - time;
int measureModulo = measure % 3600;

while (measure==0 || measureModulo!=0){
    measure = clcTime() - time;
    measureModulo = measure % 3600;
}             
                 
         

我仍然遇到的唯一问题是我无法弄清楚 (2) - 我没有发现此代码有任何其他问题。

你知道这段代码还有什么问题吗?
另外,如果我在 (1) 和 (3) 中写的错误,请随时纠正我。

此代码和您的修复程序的另一个问题是它会检查 clcTime() 以获得 完全匹配的 值。如果系统繁忙并且循环没有到达 运行 超过一秒,那么它将错过匹配的秒并继续等待至少一个小时。

还会出现用户更改系统时钟或系统时区、夏令时生效或失效、时钟自动调整闰秒等问题