for schleife wird übersprungen



  • also okay, da mich das jetzt echt in die verzweiflung treibt mal den vollen code, also is mir nochn bisschen peinlich weils noch nicht wirklich gut ist <<

    #include <iostream>
    #include <stdlib.h>
    #include <stdio.h>
    #include <time.h>
    enum FELDWERTE { EMPTY, SET, BOMBED, REVEALED };
    enum FEHLERCODE { FINE, UNKNOWN, NOTENOUGHSPACE };
    class Spielfeld{
    public:
    Spielfeld (unsigned int X, unsigned int Y);
    ~Spielfeld ();
    void SetzeFeld ( FELDWERTE Feldwert, unsigned int X, unsigned int Y );
    FELDWERTE HoleFeld ( unsigned int X, unsigned int Y ) const;
    FEHLERCODE SetzeSchiffe ( unsigned short int Schiffe, unsigned short int Schiffgroesse );
    
    private:
    FELDWERTE** Spielfeld;
    int SizeX;
    int SizeY;
    };
    
    Spielfeld::Spielfeld (unsigned int X, unsigned int Y){
    time_t t;
    srand((unsigned) time(&t));
    if ( Y == 0 )Y = 5;
    if ( X == 0 )X = 5;
    SizeY = Y;
    SizeX = X;
    Spielfeld = new FELDWERTE*[SizeX];
    for ( int i = 0; i < SizeX; i++) {
        Spielfeld[i] = new FELDWERTE[SizeY];
    }
    for ( int i = 0; i < SizeX; i++ ){
            for ( int l = 0; l < SizeY; l++ ){
            Spielfeld[i][l] = EMPTY;
            }
    }
    
    }
    //--- chek
    
    Spielfeld::~Spielfeld(){
    for(int i = 0; i < SizeY; i++) {
        delete[] Spielfeld[i];
    }
    delete[] Spielfeld;
    }
    
    //--- chek
    
    void Spielfeld::SetzeFeld ( FELDWERTE Feldwert, unsigned int X, unsigned int Y ){
    Spielfeld[X][Y] = Feldwert;
    }
    
    //--- chek
    FELDWERTE Spielfeld::HoleFeld ( unsigned int X, unsigned int Y )const {
    return Spielfeld[X][Y];
    }
    
    //--- chek
    FEHLERCODE Spielfeld::SetzeSchiffe ( unsigned short int Schiffe, unsigned short int Schiffgroesse ){
    int Count = 0;
    unsigned short int Schiffegesetzt = 0;
            for ( int i = 0; i < SizeY; i++ ){
                    for ( int k = 0; k < SizeX; k++ ){
                            if ( Spielfeld[k][i] == EMPTY ){
                                    Count++;
                                    if ( Count == Schiffgroesse ){
                                            Count = 0;
                                            if (( rand() % 2 )){
                                                    for ( int n = (k-Schiffgroesse+1); n <= Schiffgroesse; n++ ){ // die wird beim zweiten mal wenn er hier reinkommt übersprungen
                                                            Spielfeld[n][i] = SET;
                                                    }
                                                    if ( Schiffegesetzt++ == Schiffe ){
                                                            return FINE;
                                                    }
                                            }else{
    
                                            }
                                    }
                            }else{
                                    Count = 0;
                            }
    
                    }
                    Count = 0;
            }
    return NOTENOUGHSPACE;// das is noch unwichtig, stecke ja bei der for fest ^^
    }
    

    an der markierten stelle wird beim zweiten mal bei dem ich das ding durchlaufe komischerweise die for schleife übersprungen, und ich kann mir nicht vorstellen wieso. ( also ich glaub nicht das es daran liegt das ich zu doof bin den compiller zu benutzen, den er führt sie einfach nicht aus oO... beim ersten mal alles wunderbar, beim zweiten.. alles doof.

    also übersprungen wenn es in die if bedingung kommt.



  • ich versuche jetzt nicht diesen code zu verstehen da es schon spät ist 🙂 aber grundsätzlich hast du die ausführung ja selbst von

    (rand() % 2)
    

    abhängig gemacht. da darfst du dich nicht wundern, wenn sie ab und zu mal nicht ausgeführt wird 🙂



  • debugger?



  • 1. Oh mein Gott.. Rück das anständig ein.

    2. Wie sieht die Variable Schriftgrösse aus, wenn er rausspringt?



  • sothis_ schrieb:

    ich versuche jetzt nicht diesen code zu verstehen da es schon spät ist 🙂 aber grundsätzlich hast du die ausführung ja selbst von

    (rand() % 2)
    

    abhängig gemacht. da darfst du dich nicht wundern, wenn sie ab und zu mal nicht ausgeführt wird 🙂

    also das hab ich ja versucht noch so zu formulieren ^^... er kommt in die if rein, führt nicht die for aus. aber das was darunter ist ^^

    drakon schrieb:

    1. Oh mein Gott.. Rück das anständig ein.

    2. Wie sieht die Variable Schriftgrösse aus, wenn er rausspringt?

    2. chek ich net

    und klar hab ichs versucht zu debuggen, bin mit borland mit f7 also trace into ( und auch mal f8 ) durch aber er hats einfach übersprungen oO



  • Welchen Wert an Schiffgroesse an dieser Stelle?

    Und ist dir klar, dass

    l-Schiffgroesse+1
    

    dasselbe ist wie

    2-Schiffgroesse
    

    ?



  • MFK schrieb:

    Und ist dir klar, dass

    l-Schiffgroesse+1
    

    dasselbe ist wie

    2-Schiffgroesse
    

    ?

    hm? l != 1



  • guggste schrieb:

    hm? l != 1

    Ok. Mein Fehler.



  • MFK schrieb:

    guggste schrieb:

    hm? l != 1

    Ok. Mein Fehler.

    Ist übrigens ein Grund, warum ich "das kleine L" als Variablennamen scheue wie der Teufel das Weihwasser !
    Ist einfach eine Quelle zahlloser Fehler ...

    Gruß,

    Simon2.



  • Simon2 schrieb:

    MFK schrieb:

    guggste schrieb:

    hm? l != 1

    Ok. Mein Fehler.

    Ist übrigens ein Grund, warum ich "das kleine L" als Variablennamen scheue wie der Teufel das Weihwasser !
    Ist einfach eine Quelle zahlloser Fehler ...

    Gruß,

    Simon2.

    Absolut. Da stellt sich (bei der Schirftart) die (trollige) Frage:

    Wo ist der Unterschied?

    1 l
    

    Ich hätte nämlich auch darauf geschworen, dass das oben ne 1 war.. 😉



  • welche fonts habt ihr denn?
    http://img89.imageshack.us/img89/6143/1lif7.png

    sie ähneln sich zwar, aber ich sehe da einen deutlichen unterschied. ich kann mich auch nicht erinnern die beiden im source code mal verwechselt zu haben.



  • guggste schrieb:

    welche fonts habt ihr denn?
    http://img89.imageshack.us/img89/6143/1lif7.png

    sie ähneln sich zwar, aber ich sehe da einen deutlichen unterschied. ich kann mich auch nicht erinnern die beiden im source code mal verwechselt zu haben.

    Ich habe Courier new. Da gibt es auch einen Unterschied.

    Jedoch, wenn du den Code so überfliegst und was suchst, dann wird auch bei einem Unterschied schnell eine 1 draus.



  • sorry xD isnt l, ( L ) tut mir leid ^^ werds nie wieder verwenden



  • bump

    Edit: habs gefunden den fehler


Anmelden zum Antworten