Кажется, что ncurses заставляет мою петлю рано разрываться - PullRequest
0 голосов
/ 11 апреля 2019

Я запускаю программу, использующую ncurses с циклом, который должен создать окно для перемещения персонажа, подождать ~ пять секунд, очистить окно и начать снова.Я думаю, что это должно быть во вложенном окне, которое будет делать это десять раз.Однако по истечении первых пяти секунд весь цикл прерывается и программа завершается.

int i=0;
while(i < 10)
{
   playwin.makeWindow();
   wtimeout(playwin.getWindow(), 0);

   originalTime = time(NULL);
   while(newTime < 5)
   {
      newTime = time(NULL);
      newTime -= originalTime;
      player.display();
      playwin.drawWindow();
      player.getMv();
   }
   wclear(playwin.getWindow());
   i++;
}

Я ожидаю, что окно будет создано, функция wtimeout остановит функцию getMv от блокировки, вложенный цикл while отобразит окно и позволит игроку перемещаться.Примерно через пять секунд я ожидаю, что пока цикл завершится, окно очистится, итератор увеличится и цикл начнется снова.

Однако после окончания вложенного цикла while итераторуже в 10 (проверено с помощью printf), поэтому весь цикл прерывается.

Ответы [ 2 ]

1 голос
/ 12 апреля 2019

Однако после окончания вложенного цикла while итератор уже на 10 (проверяется с помощью printf), поэтому весь цикл прерывается.

видимая инициализация * 1005 отсутствует* newtime , если его начальное значение (может быть неопределенным, если инициализация вообще отсутствует) не меньше 5, while(newTime < 5)... никогда не выполняется, потому что newTime никогда не изменяется и i становится быстро 10

Если его начальное значение меньше 5, while(newTime < 5)... выполняется только один раз, потому что вы не сбрасываете его значение после

Просто добавьте, например, newTime = 0; (или значение меньше 5) до while(newTime < 5) ...

0 голосов
/ 12 апреля 2019

Перед тем как войти в цикл, originalTime устанавливается на текущее время.
Как только вы вводите, newTime получает (вероятно) то же значение.
Вы вычитаете одно из другого, поэтому newTime становится 0.
Поэтому он не будет входить в цикл второй раз.

...