Я новичок в C ++ и совсем не глубоко разбираюсь в программировании.В настоящее время я играю с GPIO моего RaspberryPi, используя код из разных источников, пытаюсь адаптировать код к моим потребностям и понять, что он делает.Итак, для краткости, я пытаюсь понять, как работает программирование на C ++, делая вещи и анализируя результаты.
Теперь я застрял с простым циклом while: я пытался использовать time_t длядайте петле поработать несколько секунд, а затем остановитесь.Но цикл не останавливается.
Я знаю, что есть много других способов сделать то же самое, но вместо того, чтобы использовать другие методы, меня больше интересует понимание того, что не так с моим, поэтому яЯ могу избежать подобных проблем в будущем и не дать моей голове взорваться.
Заранее большое спасибо за вашу помощь!
Ну, как я уже сказал, цикл не останавливается и сохраняетработает вечно.
Я думал, что добавление +20 к результату time () может как-то изменить тип данных моей переменной timeend, поэтому я добавляю +1 к результату time () моего timenow-переменная, а также.По этому я думал, что смогу убедиться, что типы данных одинаковы.... между тем я почти уверен, что это не имеет значения.
Я также добавил несколько 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);
... теперь это работает.