似乎ncurses导致我的循环提前中断

时间:2019-04-11 20:55:50

标签: c++ ncurses

我正在使用ncurses运行一个带有循环的程序,该循环应该为字符移动生成一个窗口,等待约5秒钟,清除该窗口,然后重新开始。我的想法是让它在嵌套窗口中执行十次。但是,在开始的五秒钟结束后,整个循环中断并且程序结束。

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循环结束,清除窗口,增加迭代器,并让循环重新开始。

但是,嵌套的while循环结束后,迭代器已经为10(已通过printf验证),因此整个循环中断。

2 个答案:

答案 0 :(得分:1)

  

但是,嵌套的while循环结束后,迭代器已经为10(已通过printf验证),因此整个循环中断。

没有 newtime 的可见初始化,如果它的初始值(如果没有init则可能是不确定的)不小于5,所以while(newTime < 5)...不会执行,因为< em> newTime 永不更改, i 迅速变为10

如果其初始值小于5,则while(newTime < 5)...仅执行一次,因为在此之后您不会重置其值。

只需在newTime = 0;之前添加例如while(newTime < 5) ...(或小于5的值)

答案 1 :(得分:0)

进入循环之前,将originalTime设置为当前时间。
输入后,newTime就会(可能)获得相同的值。
您将一个减去另一个,因此newTime变为0。
因此它将不再第二次进入循环。