Seltsames Verhalten der while Schleife

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
canlot
Beiträge: 393
Registriert: Di Mär 08, 2011 11:01 pm
Wohnort: NRW

Seltsames Verhalten der while Schleife

Beitrag von canlot » Di Mai 17, 2011 10:40 pm

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???
Unwissenheit ist ein Segen

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Seltsames Verhalten der while Schleife

Beitrag von Xin » Di Mai 17, 2011 11:04 pm

Er geht in die while-Schleife.
Ich gehe davon aus, dass das Programm sich nicht beendet, denn es bleibt auch in der while-Schleife...
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

canlot
Beiträge: 393
Registriert: Di Mär 08, 2011 11:01 pm
Wohnort: NRW

Re: Seltsames Verhalten der while Schleife

Beitrag von canlot » Di Mai 17, 2011 11:11 pm

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
Unwissenheit ist ein Segen

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Seltsames Verhalten der while Schleife

Beitrag von Xin » Mi Mai 18, 2011 12:07 am

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().
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

canlot
Beiträge: 393
Registriert: Di Mär 08, 2011 11:01 pm
Wohnort: NRW

Re: Seltsames Verhalten der while Schleife

Beitrag von canlot » Mi Mai 18, 2011 7:19 am

Oh vielen Dank :D
Ich bin so dumm.
Unwissenheit ist ein Segen

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Seltsames Verhalten der while Schleife

Beitrag von Xin » Mi Mai 18, 2011 8:38 am

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
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Antworten