我有一个以下代码,其中我从start
传递给timestamp
方法获得getUser
值。而且我从end
得到current timestamp
值,以毫秒为单位。
start
的最小值可以是0
,end
的最大值可以是13
我猜。因此,如果start
始终小于end
,我的下方for循环将正常工作。
bool getUser(uint64_t timestamp) {
uint64_t start = (timestamp / (60 * 60 * 1000 * 24)) % 14;
struct timeval tp;
gettimeofday(&tp, NULL);
uint64_t ms = tp.tv_sec * 1000 + tp.tv_usec / 1000; //get current timestamp in milliseconds
uint64_t end = (ms / (60 * 60 * 1000 * 24)) % 14;
for (uint64_t i = start; i<=end; i++) {
}
}
但在某些时候,start
也可能大于end
。意思是,start
值为9
且end
值为2
,那么我的上面的for循环将无效,因为在这种情况下,我想迭代我的for循环来自9 to 2
,i = 9, 10, 11, 12, 13, 0, 1, 2
。
如何确保start
小于end
且start
大于end
,那么我的上述for循环在这两种方案中都能正常工作..
如果开头小于结束,我上面的for循环工作正常,但对start
greate不起作用end
答案 0 :(得分:3)
非常简单,因此可以理解。当然还有很大的改进空间。
if(start > end)
end += 14;
for (uint64_t i = start; i<=end; i++) {
// operate on i%14
}
答案 1 :(得分:1)
为什么不使用while循环:
do{
//code here
++start;
if(start==14)
start=0;
} while(start!=end);