zu viele || in if-bedingung???[gelöst]



  • @+gjm+ und Nexus:
    der zitierte Ausdruck vergleicht ob an dieser stelle bereits eine Farbe (Rot R oder Blau 😎 definiert wurde und somit der Einwurf eines virtuellen Chips bereits stattgefunden hat( denn wenn ja ist position[...][...]mit R oder B belegt, wenn nein mit ' ');
    somit weiß das Programm wenn der user eingiebt in zeile 1 einwerfen in welcher höhe (0,1,2,3,4,5) der chip platziert werden soll.

    was soll daran falsch sein?

    mfg,
    andi01.



  • andi01 schrieb:

    @+gjm+ und Nexus:
    der zitierte Ausdruck vergleicht ob an dieser stelle bereits eine Farbe (Rot R oder Blau 😎 definiert wurde und somit der Einwurf eines virtuellen Chips bereits stattgefunden hat( denn wenn ja ist position[...][...]mit R oder B belegt, wenn nein mit ' ');
    somit weiß das Programm wenn der user eingiebt in zeile 1 einwerfen in welcher höhe (0,1,2,3,4,5) der chip platziert werden soll.

    Nö, da wird nicht verglichen, sondern zugewiesen. :p



  • oh, stimmt!!! danke, das habe ich bisher völlig übersehen=) ich werds gleich mal ausbessern
    😃 tja so einfach kann der fehler sein und man sucht manchmal ewig um ihn zu finden 😃

    ich bessere das gleich mal aus und sage euch dann obs geht.

    edit: danke, jetzt funktioniert der Code perfekt!

    danke für die ganzen Antworten,
    andi01.



  • C++ ist besonders heimtückisch, was solche Fehler angeht. Grundsätzlich rate ich dir, Leerzeichen zu setzen. Dadurch heben sich Operatoren besonders ab.

    Das sieht doch sofort merkwürdig aus:

    ... && (position[2][0] =! ' ') && ...
    


  • Nexus schrieb:

    C++ ist besonders heimtückisch, was solche Fehler angeht. Grundsätzlich rate ich dir, Leerzeichen zu setzen. Dadurch heben sich Operatoren besonders ab.

    Das sieht doch sofort merkwürdig aus:

    ... && (position[2][0] =! ' ') && ...
    

    Hm, Ansichtssache. Ich hab's früher auch mal so versucht, aber irgendwie macht der übermäßige Gebrauch von Leerzeichen den Code deutlich schlechter lesbar für mich. Ganz schlimm finde ich es, wenn Leute dies auf die Spitze treiben:

    while ( ( c = getchar() ) != '\n' && ( c != EOF ) )
    

    Mann, können die nicht einfach ihren Editor auf größeren Zeichenabstand einstellen oder so?! 😃

    Na ja, eben Ansichtssache... 🙂



  • an einigen wichtigen Stellen können Leerzeichen ganz hilfreich sein, aber zu viele machen den code dann auch wieder unleserlich und unnötig lang(vorallem bei langen codes bedeutet das dann ja fast doppelte Länge!). Man darf es halt nicht übertreiben, aber in Maßen ist das durchaus sinnvoll. Ich werde in zukunft die leerzeichen gezielt an wichtigen stellen verwenden.

    danke nochmal für die ganzen antworten,
    andi01.



  • _matze schrieb:

    Ganz schlimm finde ich es, wenn Leute dies auf die Spitze treiben:

    while ( ( c = getchar() ) != '\n' && ( c != EOF ) )
    

    So hätt ichs gemacht:

    while ((c = getchar()) != '\n' && c != EOF)
    

    Und andi01, Arrays sind so toll, weil man die Indices mit Variablen durchlaufen kann. So wie du es für das leeren des Spielfeldes gemacht hast, kannst du es auch für die Überprüfung auf einen Sieg und auch auf das Steinelegen übertragen.
    Zudem ist deine Überprüfung in gewonnen() nicht korrekt. ( a==b==c macht wohl nicht das, was du möchtest) Zudem heißt das Spiel VierGewinnt 😉

    Also eine elegantere Lösung kommt auf nichtmal 100 Zeilen. (und nein, dass sind keine tausend-Zeichen-Zeilen...)



  • jo in meiner aktuellsten version habe ich das auch überarbeitet(ist aber immnoch nicht ganz fertig), habe ich bloß hier nichmehr reingeschriebn:

    .cpp: http://rapidshare.com/files/272978233/VierGewinnt.cpp.html
    .exe: http://rapidshare.com/files/272978701/VierGewinnt.exe.html

    aber auch das is noch nicht ganz fertig.

    mfg,
    andi01.



  • edit: jetzt ist es nochmal überarbeitet:

    jetzt gesamt nur noch 308 zeilen code!

    .cpp: http://rapidshare.com/files/273039570/VierGewinnt.cpp.html
    .exe: http://rapidshare.com/files/273039252/VierGewinnt.exe.html

    edit: es gibt nur 1 problem: bein einwurf an stelle 3 5 passiert gar nix.

    mfg,
    andi01.



  • @ _matze:
    Ja, übertreiben kann mans immer. Ich mach Leerzeichen bei Klammern wie ( a + b ) eigentlich nie, eher (a + b) oder (a+b) . Die Abstände hangen meist davon ab, wie tief verschachtelt ein Ausdruck ist. Ich benutze sie also, um Priorität zu verdeutlichen:

    b += 2*(a+3) - 3*i;
    

    Auch unnötige Klammern bei AND und OR verwende ich kaum. Wird dabei eine If-Bedingung komplizierter, verlagere ich sie in mehrere Zeilen. Das kommt aber recht selten vor.



  • ich mache das eigemtlich genauso. um nochmal zum eigentlichen problem zurückzukommen, mein programm funktioniert jetzt bis auf einen kleinen fehler den ich gerne noch beheben würde aber nicht finde: beim einwurf in zeile 5 spalte 3 passiert einfach garnichts, 5 4 geht wieder und bei 5 5 werden dann leider 5 3 und 5 5 gefüllt(erstaunlicherweise richtig, nur verspätet 😕 ). alles andere funktioniert soweit hervorragend und der code(der oben ist der neueste) hat jetzt auch nur noch 308 Zeilen(!), der fehler ist das einzige problem das ich noch beheben muss.

    bloß wiedermal finde ich ihn nicht 😮 .

    mfg,
    andi01.



  • andi01 schrieb:

    beim einwurf in zeile 5 spalte 3 passiert einfach garnichts, ...

    Doch, da passiert schon was : 🙂

    // VierGewinnt.cpp zeile 18:
    cout<<"3: (...) <<position[3][4]<<" "<<position[1][5]<<" "<<position[3][6]<< (...)
    


  • Nexus schrieb:

    @ _matze:
    Ja, übertreiben kann mans immer. Ich mach Leerzeichen bei Klammern wie ( a + b ) eigentlich nie, eher (a + b) oder (a+b) . Die Abstände hangen meist davon ab, wie tief verschachtelt ein Ausdruck ist. Ich benutze sie also, um Priorität zu verdeutlichen:

    b += 2*(a+3) - 3*i;
    

    Auch unnötige Klammern bei AND und OR verwende ich kaum. Wird dabei eine If-Bedingung komplizierter, verlagere ich sie in mehrere Zeilen. Das kommt aber recht selten vor.

    Ja, finde ich vernünftig. Im Wesentlichen teile ich deine Ansicht (auch wenn bei mir noch ein paar Leerzeichen mehr verschwinden würden 😉 , dein Beispiel würde bei mir ohne Leerzeichen auskommen; wird's komplexer, werden sie auch passend eingefügt).



  • +gjm+ schrieb:

    andi01 schrieb:

    beim einwurf in zeile 5 spalte 3 passiert einfach garnichts, ...

    Doch, da passiert schon was : 🙂

    // VierGewinnt.cpp zeile 18:
    cout<<"3: (...) <<position[3][4]<<" "<<position[1][5]<<" "<<position[3][6]<< (...)
    

    also irgendwie muss beim upload was schifgegeangen sein oder so, bei mir im code ist das nicht der Fall:

    //Z.18:
    cout<<"3: "<<position[3][0]<<" "<<position[3][1]<<" "<<position[3][2]<<" "<<position[3][3]<<" "<<position[3][4]<<" "<<position[1][5]<<" "<<position[3][6]<<endl<<endl;
    

    hier habe ich nochmal die aktuelleste version upgeloadet: http://rapidshare.com/files/273072488/VierGewinnt.cpp.html

    leider besteht das problem weiterhin, das ist doch echt zum verzweifeln.



  • Meine güte, poste den code doch @ codepaste.org oder so, keine lust jedes mal bei rapidshit zu warten.



  • Soso : 🙂

    andi01 schrieb:

    //Z.18:
    cout<<"3: "<<position[3][0]<<" "<<position[3][1]<<" "<<position[3][2]<<" "<<position[3][3]<<" "<<position[3][4]<<" "<<position[1][5]<<" "<<position[3][6]<<endl<<endl;



  • jo, nächstes mal poste ich den code wo anders. aber den fehler habe ich immernoch nicht gefunden, der code sieht auch soweit richtig aus, ich kann mir einfach nicht erklären wie dieser fehler entsteht. man merkt den fehler eingentlich nur wenn man den code compilert, ausführt und mal ein paar steine in reihe 5 wirft, dann sieht man den fehler schon nach dem 4.stein, das is eigentlich die beste fehlerbeschreibung wenn man den fehler zur laufzeit selbst sieht.



  • Den Post oberhalb...

    Wieso kommt mir das Ganze eigentlich wie ein Déjà-Vu vor? Merkwürdig...



  • RAGEEEEEEEEEE schrieb:

    Meine güte, poste den code doch @ codepaste.org oder so, keine lust jedes mal bei rapidshit zu warten.

    hätte auch den vorteil, dass mehr leute einen blick drauf werfen würden, als jetzt 😛

    bb



  • ... <<" "<<position[3][4]<<" "<<position[[b]1[/b]][5]<<" "<<position[3][6]<< ...
    

    *hust* 😉


Anmelden zum Antworten