Hilfe: Endlosschleife wo keine da sein soll (C++)

    Hilfe: Endlosschleife wo keine da sein soll (C++)

    Ich schreib grad ein kleines Spiel doch da ich jetzt zu faul bin mich mit Fehlersuchen zu beschäftigen geb ich die Aufgabe an euch weiter :D ....


    while(Char_Pool > 0)
    {
    for(i = 0; i < 5; i++)
    {
    werte = 1+rand()%10;
    Char_Pool = Char_Pool - werte[i];

    if(Char_Pool < 0)
    i = 0;
    }
    }

    As a man thinketh in his heart, so is he.

    - Jun Fan


    Es gibt nichts Gutes, außer man tut es!

    - Erich Kästner
    naja, wenn ich das richtig verstanden habe hast du gleich zwei endlosschleifen in einem so kurzen codestück. herzlichen glückwunsch, das bringen nur wenige zustande :D

    die while schleife ist eine endlosschleife, weil du char_pool nie veränderst, und es somit, wenn es einmal in der schleife ist immer >0 bleibt.

    die for schleife ist (fast immer) eine endlosschleife weil wenn du in der while schleife bist, in die du ja rein musst, um in die for schleife zu kommen, ist char_pool schon mal sicher kleiner oder gleich null. nachdem du dann abfragst, ob char_pool < 0 ist, was ja sehr wahrscheinlich ist, wird i fast jedesmal auf 0 gesetzt, wodurch es zur endlosschleife wird.

    also:
    wenn char_pool null ist, ist die while schleife die endlosschleife.
    wenn char_pool kleiner null ist, ist die for schleife die endlosschleife

    ausbessern würd ich aber beide ;)

    mfg, Thorden
    Da hast dich verlesen, die while schleife geht so lange, so lange char_pool > 0 ist... aber die ist endlos wenn du mal drinnen bist, die if Bedingung kann aber nie erfüllt sein weil char_pool > 0 ist, sonst keine while Schleife. Du musst in einer Schleife die Abbruchvariable verändern, sonst kommst du nie raus.

    Was für einen Sinn soll dieses Code Stückchen haben?

    Ich programmier zwar C und nicht C++, aber soweit sollt das das gleiche sein :-).

    Möglich, dass du nicht alles gepostet hast?
    Do not believe what you see, hear, smell, taste or even think.
    Ups, stimmt da fehlt was und soviel ich weis ist der Unterschied zwischen C und C++ die objektorientierte Programmierung bzw. das die Klassen andere Namen haben.

    So diese Zeile hat gefehlt
    Char_Pool = Char_Pool - werte;
    As a man thinketh in his heart, so is he.

    - Jun Fan


    Es gibt nichts Gutes, außer man tut es!

    - Erich Kästner
    Original von Dexter041

    while(Char_Pool > 0)
    {
    for(i = 0; i < 5; i++)
    {
    werte = 1+rand()%10;
    Char_Pool = Char_Pool - werte[i];

    if(Char_Pool < 0)
    i = 0;
    }
    }



    Ich vermute mal, wenn char_pool < 0 ist, willst du aus der for-Schleife aussteigen, oder?
    Wenn ja, dann solltest du den Wert von i auf 5 setzten oder ein break; einfügen statt i=0 zu setzen, damit startest du die for Schleife praktisch von vorne und kommst damit nie aus ihr raus, sobald char_pool mal negativ ist und aus der while kommst net raus, solang sie positiv ist... teuflisch *lol*.

    Es gibt genau eine Möglichkeit, dass das keine endlosschleife ist, und zwar muss Char_pool am Ende eines 5. for Durchlaufes genau 0 sein :-)... das wär aber viel Zufall auf einmal mit Random Zahlen.
    Do not believe what you see, hear, smell, taste or even think.
    Nein, das ist eigentlich nicht meine Absicht, sondern ich will das das wertefeld solange werte zugeteilt bekommt bis Char_Pool (Char_Pool hat den Wert 30) null ist, so das er von vorne beginnt mit dem Werte zuteilen falls Char_Pool durch zu hohes Zufallswerte zuteilen eine Minuszahl ergibt.
    As a man thinketh in his heart, so is he.

    - Jun Fan


    Es gibt nichts Gutes, außer man tut es!

    - Erich Kästner
    hm, wenn er also von vorne beginnen soll, musst du nicht nur i=0 setzen, sondern auch char_pool wieder einen positiven Wert zuweisen. Ist char_pool einmal negativ, bleibt es für immer negativ bei dir und somit setzt du immer i auf 0 und somit haben wir die Endlosschleife.

    rand()%10 ergibt Werte von 0-9 oder wie (schon lang nimma Zufallszahlen gebraucht).

    Also du rennst durch und willst, dass in 5 Durchgängen genau 30 auf die werte aufgeteilt wird?... d.h. die Summe der 5 Werte ist nachher 30... Charaktererzeugung?

    Also abschliesend, char_pool wieder auf 30 setzen und dann sollts klappen.
    Do not believe what you see, hear, smell, taste or even think.