Void Funktion



  • Hallo,

    ich hab eine Frage zu einer void Funktion und zwar:

    hab ich in ihr eine if-else-Schleife drin und im else-Zweig soll die Funktion neu gestartet werden, aber zuvor natürlich beendet werden, sonst kommt es da ja bestimmt zu komplikationen. Kann mir da jemand nen Tipp geben?

    [code]
    void navigator()
    {

    int x;
    // generiert Zahlen
    x= 10 + (rand()%(100-10+1));

    if(x< 90)
    {
    // mach irgendwas
    }
    else
    {
    //funktion neu starten und aber vorherigen Aufruf beenden
    }



  • Benutze eine while Schleife und gib als Bedingung x>=90 an und lasse jenachdem weiter laufen oder x in der schleife neu berechnen.

    Ach und if-else ist keine Schleife das ist ne Verzweiung bzw. Anweisung 😉



  • yogoo schrieb:

    [...] und im else-Zweig soll die Funktion neu gestartet werden, aber zuvor natürlich beendet werden [...]

    Wenn du die Funktion navigator() im else Zweig der Funktion navigator erneut aufrufst, ist die aufrufende Funktion noch nicht beendet! Es ensteht in diesem Fall eine endlos-Rekursion.

    Caipi



  • sind sonst läbles 'ne lösung? dann wird zumindest die Rekursion vermieden.

    void navigator()
    {
    
    int x;
    anfang:
    // generiert Zahlen
    x= 10 + (rand()%(100-10+1));
    
    if(x< 90)
    {
    // mach irgendwas
    }
    else
    {
    goto anfang;
    //funktion neu starten und aber vorherigen Aufruf beenden
    }
    

    an sonsten mit 'nem rückgabewert:

    [code]
    int navigator()
    {
    
    int x;
    // generiert Zahlen
    x= 10 + (rand()%(100-10+1));
    
    if(x< 90)
    {
    // mach irgendwas
    return 0;
    }
    else
    {
    //funktion neu starten und aber vorherigen Aufruf beenden
    return 1;
    }
    
    int main (void){
    int i;
    
    while(  navigator())
       ;
    }
    


  • nachtrag:

    wenn Du auf das VOID navigator() gesteigerten wert legst, kannst Du auch 'nen pointer als argument übergeben und so den int wert zurückliefern



  • kleiner anfänger schrieb:

    sind sonst läbles 'ne lösung? dann wird zumindest die Rekursion vermieden.

    Btw: Die Dinger heißen Labels ;). Ich würde sie hier allerdings nicht benutzen, da sie den Code hier unötig verwirren.

    ...
    //funktion neu starten und aber vorherigen Aufruf beenden
    ...
    }
    

    Das hier ist falsch. Der vorige Aufruf der Funktion wird hier nicht beendet. Du springst einfach nur wieder nach oben.

    an sonsten mit 'nem rückgabewert:

    [code]
    int navigator()
    {
    
    int x;
    // generiert Zahlen
    x= 10 + (rand()%(100-10+1));
    
    if(x< 90)
    {
    // mach irgendwas
    return 0;
    }
    else
    {
    //funktion neu starten und aber vorherigen Aufruf beenden
    return 1;
    }
    
    int main (void){
    int i;
    
    while(  navigator())
       ;
    }
    

    So ist das doch schon eher was.

    Caipi



  • @kleiner Anfänger: machs doch nicht so kompliziert 😃 !
    goto's benutzt eh keiner (fast) mehr und beim 2'ten code
    verschwendest du zeit weil du im schlimmsten Falle,mehrmals
    aus der Funktion raus und rein springst...

    void navigator()
    {
    
       int x;
    
       do {
              x = 10 + (rand()%(100-10+1));
    
       } while(x>=90);
    
    // mach irgendwas
    
    }
    

Anmelden zum Antworten