比较time_t值时,为什么我的While-Loop不停止?

时间:2019-02-07 21:39:36

标签: c++ while-loop

我是C ++的新手,根本不熟悉编程。目前,我正在使用来自不同来源的代码来处理我的RaspberryPi的GPIO,试图使代码适应我的需求并了解其工作情况。因此,简而言之,我正在尝试通过做一些事情并分析结果来学习C ++编程的工作原理。

现在,我陷入了一个简单的While-Loop: 我尝试使用time_t让循环运行几秒钟,然后停止。但是循环不会停止。

我知道,有很多其他方法可以完成相同的事情,但是我不去使用其他方法,而是更加了解我的问题,因此我可以避免以后再遇到类似的问题并保持我的头爆炸了。

在此先感谢您的帮助!

好吧,正如我所说,循环不会停止,并且会永远运行。

我认为,在time()结果上添加+20可能会以某种方式更改我的timeend-variable的数据类型,因此我也在timenow-variable的time()结果中添加了+1。这样,我想我可以确保数据类型相同。 ...与此同时,我很确定这不会有任何改变。

我还添加了一些printf,所以我可以看到每个周期的实际值。 ...看起来不错。

我认为,也许这些time_t值在当前状态下不具有可比性。因此,我添加了一些“如果”来检查是否可以比较这些值。 ...是的,他们可以,而且效果很好。

我还尝试将timeend和timenow值替换为普通整数值,例如:

int i = 20
int iend = 0
while(i > iend)
    <all the other stuff>
    iend = iend + 1

...嗯,像这样工作正常。 因此,我很确定,问题出在那些time_t值上。但我不明白,为什么它在“如果”中工作正常,而在“时间”中根本不工作。

这是我的代码:

#include <stdio.h>
#include <time.h>

int main(void)
{
time_t timeend = (time(NULL) + 20); //creating a finish-value of 20sec in the future
time_t timenow = (time(NULL) + 1); //current time +1, "+1" only for bug fix

while(timeend > timenow){
    time_t timenow = (time(NULL) + 1);

    printf("%d\n", timeend); //printing values for bug fix
    printf("%d\n", timenow);

    if(timeend > timenow){   //checking if comparing those values timeend and timenow even works ...yes, it works.
        printf("bigger\n");
    }
    else if(timeend < timenow){
        printf("smaller\n");
    }
    else
        printf("error\n");

    delay (1000); //adding a little delay, so the loop only gets processed once per second.
    }
return 0;
}

这是我的控制台的摘录(仅循环结束的部分):

...
1549566971 //value of timeend
1549566966 //value of timenow
bigger     //outcome of my "if" checkings, comparing those values
1549566971
1549566967
bigger
1549566971
1549566968
bigger
1549566971
1549566969
bigger
1549566971
1549566970
bigger
1549566971
1549566971
error      //here the while loop should stop, as timeend isn't bigger than timenow anymore, but it continues anyway.
1549566971
1549566972
smaller
1549566971
1549566973
smaller
1549566971
1549566974
smaller
1549566971
1549566975
smaller
1549566971
1549566976
smaller
1549566971
1549566977
smaller
...

编辑:

我已更改:

while(timeend > timenow){
    time_t timenow = (time(NULL) + 1);

进入:

while(timeend > timenow){
    timenow = (time(NULL) + 1);

...现在可以了。

1 个答案:

答案 0 :(得分:3)

重新声明

time_t timenow = (time(NULL) + 1);

您的循环正在测试一个外部(首先声明):)