在开始和结束条件下切换for循环

时间:2013-11-27 19:52:34

标签: c++ for-loop

我有一个以下代码,其中我从start传递给timestamp方法获得getUser值。而且我从end得到current timestamp值,以毫秒为单位。

start的最小值可以是0end的最大值可以是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值为9end值为2,那么我的上面的for循环将无效,因为在这种情况下,我想迭代我的for循环来自9 to 2i = 9, 10, 11, 12, 13, 0, 1, 2

如何确保start小于endstart大于end,那么我的上述for循环在这两种方案中都能正常工作..

如果开头小于结束,我上面的for循环工作正常,但对start greate不起作用end

2 个答案:

答案 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);