在'while'中测试'SDL_PollEvent'的正确方法

TTK*_*TTK 2 c c++ sdl sdl-2

正如手册所说,函数SDL_PollEvent"如果有待处理事件则返回1,如果没有可用则返回0".,这就是为什么我们使用的测试SDL_PollEvent(&e)!=0(如果eSDL_Event).

但是,使用这个测试!SDL_PollEvent(&e)怎么样?它应该工作,但显然它会导致一些问题.

这是一个代码示例:

    #include <SDL2/SDL.h>
    #include <stdio.h>

    int main(int argc, char* args[]){
      SDL_Init(SDL_INIT_VIDEO);
      SDL_Window* window =   SDL_CreateWindow("Hello",SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 100, 100,  SDL_WINDOW_SHOWN);
      SDL_Event e;
      int quit=0;
      while(!quit){
          //Here the test
          while (!SDL_PollEvent(&e)){
             if (e.type==SDL_QUIT)
                quit=1;
             else if ( e.type == SDL_KEYDOWN )
                printf( "Hello\n" );
          }
      }
      SDL_DestroyWindow(window);
      SDL_Quit();
      return 0;
   }
Run Code Online (Sandbox Code Playgroud)

这个代码应该做的是打开一个新窗口,并在每次按下一个键时在控制台中打印"Hello".这段代码可以很好地测试,SDL_PollEvent(&e)!=0但是SDL_KEYDOWN当我使用测试时它不会读取事件!SDL_PollEvent(&e)(但它会在while中输入并处理SDL_QUIT事件而没有任何问题).
为什么会这样?

deW*_*eW1 6

while (!SDL_PollEvent(&e))
Run Code Online (Sandbox Code Playgroud)

需要是:

while (SDL_PollEvent(&e))
Run Code Online (Sandbox Code Playgroud)

如果它应该是相同的 SDL_PollEvent(&e) != 0

因为!SDL_PollEvent(&e)和呼叫一样while(0)