2016-05-15 3 views
0

Wie kann ich eine Funktion beenden, nachdem sie einmal innerhalb einer -Schleife aufgerufen wurde? Im folgenden Code würde ich zum Beispiel wollen myfunc() nur einmal aufgerufen werden, dann nicht wieder innerhalb der Schleife aufgerufen werden. Ist das möglich?Ist es möglich, eine Funktion zu beenden, die innerhalb einer Schleife außerhalb der Schleife liegt?

 do{ 
      myfunc(); 

      glClear(GL_COLOR_BUFFER_BIT); 
      glDisable(GL_DEPTH_TEST); 
      glMatrixMode(GL_PROJECTION); 
      glLoadIdentity(); 
      glOrtho(0, fb_width, fb_height, 0, 0, 1); 
      glMatrixMode(GL_MODELVIEW); 

      drawSomething(); 

      glfwSwapBuffers(w); 
      glfwPollEvents(); 
      } 
     while (something); 
+2

Warum nicht, bevor die Schleife startet, oder ist Ihr tatsächlicher Code komplexer als dieser? – OldBoyCoder

Antwort

1

Entweder yo kann es vor der do while-Schleife setzt

oder Sie können ein Flag-Variable enthalten, die gespeichert werden, ob die Funktion bereits ausgeführt wurde oder nicht.

int flag = 0; 

do { 

    if(flag==0){ 
     myfunc(); 
     flag=1; 
    } 
    ... // Rest of the loop 

} 
0

Üblicherweise kann man es mit einer statischen Variable machen, die den ersten Durchgang zählt. Die Implementierung kann davon abhängen, ob es sich um einen Anruf oder um einen Rückruf handelt.

static int first = 0; 

do{ 
    if(!first){ 
     myfunc(); 
     first = 1; 
     } 
    glClear(GL_COLOR_BUFFER_BIT); 
    // the rest of your code 

}while something; 

first = 0; //or not zero it if you want to remember the state 
Verwandte Themen