local static data - statische variable wird immer wieder auf 0 gesetzt



  • Ich habe eine Funktion func.
    In dieser Funktion durchlaeuft eine Schleife ein Array und soll jedes Element des Arrays returnen.
    Natuerlich ist nach dem returnen der aktuelle Wert des Zaehlers i wieder futsch .
    Mein Ziel ist es, diesen irgendwie beizubehalten, so dass folgendes Codefragment mein Array char fuer char ausgibt:

    char chars[] = {"abcdefghijklmnopqrstuvwxyz"};
    char func()
    {
            static int i=0;
            for(; i<26; ++i)        
                return chars[i];        
    }  
    
    int main()
    {
        while(true)
            std::cout << func() << std::endl;
    }
    

    Ich dachte, den Zaehler als static zu deklarieren wuerde helfen, da er ja nun nicht mehr beim verlassen der Funktion zerstoert wird,
    aber irgendwie scheint er immer 0 zu sein und es wird nur 'a' ausgegeben.
    Woran liegt das? Habt ihr evtl, eine bessere Loesung?



  • Könnte vielleicht daran liegen dass i++ niemals erreicht wird, weil das return vorher kommt....



  • for(; i<26; ++i)        
                return chars[i];
    

    Du gehst ja in die Schleife rein dann kommt das return und dann wieder in die Schleife rein und dann wieder return (vorher wird natürlich immer die Bedingung geprfüft)

    Aber wie du siehst kommst du nie zum Inkrementieren 😃

    while(i<26) return chars[i++];
    

    👍



  • aaaaach, lasst mich doch alle in ruhe 😃



  • Suchst du sowas wie Python's yield-Anweisung? Ich würd zustandsbehaftete Funktionen vermeiden, wie willst du z.b. deinen Zähler rücksetzen? Besser ist IMHO ein Funktionsobjekt mit dem Zähler als Instanzvariable.



  • In Python gibt's auch ein yield? Lame, ich dachte, das wäre was geniales neues für C#. 😞



  • Oder wars Ruby. Keine Ahnung.


Anmelden zum Antworten