Seite 1 von 1

Seltsames Verhalten der while Schleife

Verfasst: Di Mai 17, 2011 10:40 pm
von canlot
Hallo Leute :D
Ich habe ein simles RPG geschrieben mit verschiedenen Funktionen.
Mein Problem ist dass das Programm in die while Schleife nicht reingeht und ich weiß nicht warum.

Code: Alles auswählen

#include <stdlib.h>
#include <stdio.h>
#include <time.h>

struct main_charakter
{
    char *Name;
    int attack;
    int defense;
    int level;
    int experience;

} Jakob = { "Jakob", 50, 100, 0, 0 };

struct enemy
{
    char *Name;
    int attack;
    int defense;
    int level;

} enemy_1 = {"enemy", 50, 100, 0,};


void level_up(void)
{

}

int fight(void)
{
    printf("Fight\n");
    int win = 0;
    int attack = enemy_1.attack + (rand() % 60 +1);
    int defense = enemy_1.defense + (rand() % 60 +1);
    int main_defense = Jakob.defense;
    int temp_expirience = enemy_1.defense;

    while(win == 0)
    {
        printf("Angreifen\n");
        getchar();

        defense -= Jakob.attack;
        if(defense < 0)
            defense = 0;

        printf("%s - Gesundheit %d \n%s - Gesundheit %d\n",Jakob.Name, main_defense, enemy_1.Name,defense);
        printf("Ihr Schaden -> %d\nGegners Schaden -> %d\n",Jakob.attack,attack);

        if(defense <= 0)
        {
            Jakob.experience = temp_expirience;
        }

        if(defense <= 0)
            return 1;

         if(defense <= 0|| main_defense <= 0)
            win = 1;

         main_defense -= attack;

         if(main_defense < 0)
            main_defense = 0;
    }

}



int main(void)
{
    srand(time(NULL));
    char answer = 'j';

    while(answer == 'j');
    {
        printf("Lust auf ein Fight?\n");
        scanf("%c", &answer);
            if(answer == 'j')
            {
                if(fight() == 1)
                {
                    printf("Sie haben gewonnen!!!");
                }
                else
                    printf("Sie haben verloren");
            }
    }

    return 0;
}


Wie gesagt: das Programm will nicht in die erste while Schleife reingehen also hier.

Code: Alles auswählen

while(answer == 'j');
    {
        printf("Lust auf ein Fight?\n");
        scanf("%c", &answer);
            if(answer == 'j')
            {
                if(fight() == 1)
                {
                    printf("Sie haben gewonnen!!!");
                }
                else
                    printf("Sie haben verloren");
            }
    }
obwohl ich answer vorher mit j deklariert habe.
Hat jemand eine Idee???

Re: Seltsames Verhalten der while Schleife

Verfasst: Di Mai 17, 2011 11:04 pm
von Xin
Er geht in die while-Schleife.
Ich gehe davon aus, dass das Programm sich nicht beendet, denn es bleibt auch in der while-Schleife...

Re: Seltsames Verhalten der while Schleife

Verfasst: Di Mai 17, 2011 11:11 pm
von canlot
Ein Fehler des Compilers???
Wenn ich ich am Anfang answer nicht als j deklariere dann geht er in die Schleife und beendet sich nach genau einen Durchgang.
komisch, sehr komisch

Re: Seltsames Verhalten der while Schleife

Verfasst: Mi Mai 18, 2011 12:07 am
von Xin
canlot hat geschrieben:Ein Fehler des Compilers???
In der Regel ist es ein Fehler des Entwicklers.
canlot hat geschrieben: Wenn ich ich am Anfang answer nicht als j deklariere dann geht er in die Schleife und beendet sich nach genau einen Durchgang.
komisch, sehr komisch
Nein, dann geht er gar nicht erst in die Schleife.

Der Code macht genau, was Du programmiert hast.

Du hast ein Semikolon nach while(). Das sagt aus, dass Du in jedem Durchgang nichts machst, also auch nicht 'answer' änderst.
Wenn answer != 'j' ist, geht er nicht in die Schleife und führt den Code dahinter aus. Dort öffnest Du einen neuen Scope (Du machst die geschweifte Klammer auf). Die Klammer gehört aber nicht mehr zum while().

Re: Seltsames Verhalten der while Schleife

Verfasst: Mi Mai 18, 2011 7:19 am
von canlot
Oh vielen Dank :D
Ich bin so dumm.

Re: Seltsames Verhalten der while Schleife

Verfasst: Mi Mai 18, 2011 8:38 am
von Xin
canlot hat geschrieben:Oh vielen Dank :D
Ich bin so dumm.
Nein, Anfänger.

Der Unterschied zwischen einem Anfänger und einem professionellen Entwickler ist, dass der professionelle Entwickler, den Fehler schon so oft gemacht hat, dass er bei einer fraglichen Stelle automatisch die üblichen Verdächtigen abcheckt. Darum habe ich Dir die Lösung auch nicht gleich im ersten Posting gesagt, damit Du es selbst sehen kannst.

Programmieren lernen ist zu lernen, wie es nicht geht. Du lernst soeben programmieren und so geht's nicht. Wenn Du das nächste Mal in einer Endlosschleife landest, wirst Du vergessen haben auf das Semikolon am Ende der Schleife zu achten, Du wirst wieder suchen, aber so ein merkwürdiges Gefühl eines Deja-Vus haben.
Mach das 10mal, dann hast Du diese Lektion gelernt. ;-D