gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-27 23:41:12 25 4
gpt4 key购买 nike

我是 C++ 的新手,对编程不是很深入。目前我正在使用来自不同来源的代码来玩我的 RaspberryPi 的 GPIO,试图使代码适应我的需要并了解它在做什么。因此,简而言之,我正在尝试通过实际操作和分析结果来了解 C++ 编程的工作原理。

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

我知道,有很多其他方法可以做同样的事情,但我没有使用其他方法,我更感兴趣的是了解我的问题所在,这样我就可以避免在未来遇到类似的问题并继续我的头免于爆炸。

非常感谢您的帮助!

好吧,正如我所说,循环不会停止并一直运行下去。

我想,将 +20 添加到 time() 结果可能会以某种方式改变我的 timeend 变量的数据类型,所以我也将 +1 添加到我的 timenow 变量的 time() 结果。通过这个,我想我可以确保数据类型是相同的。 ...与此同时,我很确定这没有什么不同。

我还添加了一些 printf,因此我可以看到每个循环的实际值。 ...看起来不错。

我想,也许这些 time_t 值在当前状态下不可比。所以我添加了一些“如果”来检查这些值是否可以进行比较。 ...是的,他们可以,而且效果很好。

我还尝试用正常的整数值替换我的 timeend 和 timenow 值,例如:

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

...好吧,像这样它工作正常。因此我很确定,问题出在那些 time_t 值上。但我不明白,为什么它在“if”中工作正常,但在“while”中根本不起作用。

这是我的代码:

#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);

……现在可以了。

最佳答案

重新声明

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

你的循环正在测试外面的循环(首先声明):)

关于c++ - 为什么在比较 time_t 值时我的 While-Loop 不停止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54582734/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com