Code wird nicht ausgeführt(ohne Fehlermeldung)



  • Hallo, ich bin neu beim C++ Programmieren und habe soeben mein erstes spiel programmiert. es ist tic-tac-toe. ich habe in den code geschrieben dass wenn ein spieler eine 3-er reihe hat dass er das spiel gewinnt. doch in der konsole passiert nichts. Weshalb?

    Der Code:

    #include <iostream>
    #include <string>

    using namespace std;

    string c1 = "1";
    string c2 = "2";
    string c3 = "3";
    string c4 = "4";
    string c5 = "5";
    string c6 = "6";
    string c7 = "7";
    string c8 = "8";
    string c9 = "9";
    int ci1 = 1;
    int ci2 = 2;
    int ci3 = 3;
    int ci4 = 4;
    int ci5 = 5;
    int ci6 = 6;
    int ci7 = 7;
    int ci8 = 8;
    int ci9 = 9;
    int option = 0;

    int tile;

    int main()
    {
    start:
    cout << "Viel Spass beim Spielen:" << endl;

    while(true)
    {
    cout << endl;
    cout << " " << c1 << " | " << c2 << " | " << c3 << " " << endl;
    cout << "-----------" << endl;
    cout << " " << c4 << " | " << c5 << " | " << c6 << " " << endl;
    cout << "-----------" << endl;
    cout << " " << c7 << " | " << c8 << " | " << c9 << " " << endl << endl;
    again1:
    cout << "Spieler 1: ";

    cin >> tile;

    switch(tile)
    {
    case 1:
    if(ci1 == 100)
    {
    cout << "Dieses Kaestchen ist schon ausgefuellt" << endl;
    goto again1;
    }
    c1 = "X";
    ci1 = 100;
    break;

    case 2:
    if(ci2 == 100)
    {
    cout << "Dieses Kaestchen ist schon ausgefuellt" << endl;
    goto again1;
    }
    c2 = "X";
    ci2 = 100;
    break;

    case 3:
    if(ci3 == 100)
    {
    cout << "Dieses Kaestchen ist schon ausgefuellt" << endl;
    goto again1;
    }
    c3 = "X";
    ci3 = 100;
    break;

    case 4:
    if(ci4 == 100)
    {
    cout << "Dieses Kaestchen ist schon ausgefuellt" << endl;
    goto again1;
    }
    c4 = "X";
    ci4 = 100;
    break;

    case 5:
    if(ci5 == 100)
    {
    cout << "Dieses Kaestchen ist schon ausgefuellt" << endl;
    goto again1;
    }
    c5 = "X";
    ci5 = 100;
    break;

    case 6:
    if(ci6 == 100)
    {
    cout << "Dieses Kaestchen ist schon ausgefuellt" << endl;
    goto again1;
    }
    c6 = "X";
    ci6 = 100;
    break;

    case 7:
    if(ci7 == 100)
    {
    cout << "Dieses Kaestchen ist schon ausgefuellt" << endl;
    goto again1;
    }
    c7 = "X";
    ci7 = 100;
    break;

    case 8:
    if(ci8 == 100)
    {
    cout << "Dieses Kaestchen ist schon ausgefuellt" << endl;
    goto again1;
    }
    c8 = "X";
    ci8 = 100;
    break;

    case 9:
    if(ci9 == 100)
    {
    cout << "Dieses Kaestchen ist schon ausgefuellt" << endl;
    goto again1;
    }
    c9 = "X";
    ci9 = 100;
    break;

    default:
    cout << "Diese Moeglichkeit gibt es nicht!" << endl;
    goto again2;
    }

    if(ci1 == ci2 == ci3 || ci4 == ci5 == ci6 || ci7 == ci8 == ci9 || ci1 == ci4 == ci7 || ci2 == ci5 == ci8 || ci3 == ci6 == ci9 || ci1 == ci5 == ci9 || ci3 == ci5 == ci9)
    {
    cout << "Spieler 1 hat gewonnen" << endl;
    break;
    }

    cout << endl;
    cout << " " << c1 << " | " << c2 << " | " << c3 << " " << endl;
    cout << "-----------" << endl;
    cout << " " << c4 << " | " << c5 << " | " << c6 << " " << endl;
    cout << "-----------" << endl;
    cout << " " << c7 << " | " << c8 << " | " << c9 << " " << endl << endl;
    again2:
    cout << endl << "Spieler 2: ";

    cin >> tile;

    switch(tile)
    {
    case 1:
    if(ci1 == 100)
    {
    cout << "Dieses Kaestchen ist schon ausgefuellt" << endl;
    goto again2;
    }
    c1 = "0";
    ci1 = 100;
    break;

    case 2:
    if(ci2 == 100)
    {
    cout << "Dieses Kaestchen ist schon ausgefuellt" << endl;
    goto again2;
    }
    c2 = "0";
    ci2 = 100;
    break;

    case 3:
    if(ci3 == 100)
    {
    cout << "Dieses Kaestchen ist schon ausgefuellt" << endl;
    goto again2;
    }
    c3 = "0";
    ci3 = 100;
    break;

    case 4:
    if(ci4 == 100)
    {
    cout << "Dieses Kaestchen ist schon ausgefuellt" << endl;
    goto again2;
    }
    c4 = "0";
    ci4 = 100;
    break;

    case 5:
    if(ci5 == 100)
    {
    cout << "Dieses Kaestchen ist schon ausgefuellt" << endl;
    goto again2;
    }
    c5 = "0";
    ci5 = 100;
    break;

    case 6:
    if(ci6 == 100)
    {
    cout << "Dieses Kaestchen ist schon ausgefuellt" << endl;
    goto again2;
    }
    c6 = "0";
    ci6 = 100;
    break;

    case 7:
    if(ci7 == 100)
    {
    cout << "Dieses Kaestchen ist schon ausgefuellt" << endl;
    goto again2;
    }
    c7 = "0";
    ci7 = 100;
    break;

    case 8:
    if(ci8 == 100)
    {
    cout << "Dieses Kaestchen ist schon ausgefuellt" << endl;
    goto again2;
    }
    c8 = "0";
    ci8 = 100;
    break;

    case 9:
    if(ci9 == 100)
    {
    cout << "Dieses Kaestchen ist schon ausgefuellt" << endl;
    goto again2;
    }
    c9 = "0";
    ci9 = 100;
    break;

    default:
    cout << "Diese Moeglichkeit gibt es nicht!" << endl;
    goto again2;
    }

    if(ci1 == ci2 == ci3 || ci4 == ci5 == ci6 || ci7 == ci8 == ci9 || ci1 == ci4 == ci7 || ci2 == ci5 == ci8 || ci3 == ci6 == ci9 || ci1 == ci5 == ci9 || ci3 == ci5 == ci9)
    {
    cout << "Spieler 2 hat gewonnen." << endl;
    break;
    }
    }

    option:
    cout << "Nochmal spielen?" << endl;
    cout << "JA. <1>" << endl;
    cout << "Nein. Und beenden <2>" << endl;
    cin >> option;
    switch(option)
    {
    case 1:
    goto start;
    break;

    case 2:
    return 0;
    break;

    default:
    cout << "Diese Option gibt es nicht" << endl;
    goto option;
    break;
    }
    getchar();
    return 0;

    }



  • Dieser Thread wurde von Moderator/in Martin Richter aus dem Forum MFC (Visual C++) in das Forum C++ (auch C++0x und C++11) verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


  • Mod

    if (ci1 == ci2 == ci3) vergleicht nicht ci1, ci2 und ci3 auf gemeinsame Gleichheit, sondern vergleicht ci1 und ci2 auf Gleichheit und das Ergebnis davon (also true oder false) mit ci3. Stattdessen musst du hier mit Einzelvergleichen und logischen Verknüpfungen arbeiten.

    Ein guter Compiler würde dich davor warnen. Mag sein, dass du einen guten Compiler hast, du aber dessen Warnungen abwürgst. Mach dich mal kundig, wie du bei dir Warnungen aktivierst.

    Noch ein Wort: Dein Programm ist ein perfektes Beispiel für Spaghetticode. Benutz als Anfänger niemals goto und niemals (nicht konstante) globale Variablen. Wenn sich gleicher oder ähnlicher Code mehr als zweimal wiederholt, machst du ebenfalls was falsch. Deine Variablennamen sollten unbedingt ausdrücken, was die Bedeutung dieser Variablen ist. ci1? Wenn ich das meiner Oma nenne, dann hat die keine Ahnung, was damit gemeint ist. Sollte sie aber. Versuch unbedingt, alle diese Punkte zu verbessern! Das ist wichtig!



  • Hallo,

    obwohl man noch viel anderes zu deinem Programm sagen könnte, liegt das Grundproblem an den "Dreier-Vergleichen":

    if(ci1 == ci2 == ci3 || ...)
    

    So kann man nicht 3 Zahlen gleichzeitig auf Gleichheit prüfen, du musst schon ausführlich schreiben:

    if(ci1 == ci2 && ci2 == ci3 || ...)
    

    MfG,

    Probe-Nutzer



  • SeppJ schrieb:

    [c] "Deine Variablennamen sollten unbedingt ausdrücken, was die Bedeutung dieser Variablen ist. ci1?"

    c steht für case, und i für integer.

    aber du hast recht ich sollte sie deutlicher machen



  • [quote="Probe-Nutzer"]

    if(ci1 == ci2 && ci2 == ci3 || ...)
    

    danke für den richtigen code


  • Mod

    Nuggatschnitte schrieb:

    SeppJ schrieb:

    [c] "Deine Variablennamen sollten unbedingt ausdrücken, was die Bedeutung dieser Variablen ist. ci1?"

    c steht für case, und i für integer.

    Ich rate dir auch, Variablen nicht nach ihrem Typ zu benennen. Dieser ist entweder unwichtig (das ist der Normalfall) oder klar.

    Siehe auch:
    http://www.c-plusplus.net/forum/p1773551#1773551



  • @Nuggatschnitte
    Wo lernst Du denn so programmieren?
    Aus einem Buch? Dann wirf es bitte weg.
    Von einem Lehrer? Dann töte ihn bitte.

    😮



  • Von einem Lehrer? Dann töte ihn bitte.

    Haha, made my day~

    Nein ernsthaft, das was du da programmierst könnte man wohl in Assembler noch übersichtlicher schreiben.



  • rwerwerqsy schrieb:

    Wo lernst Du denn so programmieren?
    Aus einem Buch? Dann wirf es bitte weg.
    Von einem Lehrer? Dann töte ihn bitte.

    😮

    ich lerene es über youtube und internetforen. normalerweiße sieht es bei mir auch anders aus aber c-plusplus.net nimmt keine tabs mit auf .
    bei mir siehts dann aus wie beim ihm:
    http://www.youtube.com/watch?v=RxsmF4pbjwM&feature=plcp

    Wenn du willst dann gebe mir einfach tipps wie es besser aussehen könnte.
    das wäre nett. 🙂



  • Hol dir ein gutes Buch, es gibt nen guten Thread im FAQ dazu (gebe Link falls gewünscht)



  • Nuggatschnitte schrieb:

    ich lerene es über youtube und internetforen. normalerweiße sieht es bei mir auch anders aus aber c-plusplus.net nimmt keine tabs mit auf .
    bei mir siehts dann aus wie beim ihm:
    http://www.youtube.com/watch?v=RxsmF4pbjwM&feature=plcp

    Das Stichwort lautet in diesem Fall C++-Tags. Das Forum unterstützt sehr wohl Tabs, du musst ihm nur sagen, dass das dein Code ist.

    std::cout << "Der C/C++-Button bewirkt Wunder.";
    


  • Nuggatschnitte schrieb:

    ich lerene es über youtube und internetforen. normalerweiße sieht es bei mir auch anders aus aber c-plusplus.net nimmt keine tabs mit auf .
    bei mir siehts dann aus wie beim ihm:
    http://www.youtube.com/watch?v=RxsmF4pbjwM&feature=plcp

    Ich möchte dich vor diesem Video-Tutorial warnen, es ist schrott. Mal so als Hinweis, wenn du dir ein Video-Tutorial anschaust. Ob jemand etwas Ahnung von C++ hast, erkennst du ziemlich oft im Kapitel Eingabe mit Dateien . Wie erwartet hat auch dieser Typ so ein Kapitel, er nennt es Aus Dateien lesen. Und wie erwartet, benutzt er ios::eof . Damit ist schon klar, dass er C++ nie gelernt. Höchst wahrscheinlich lernt er nach dem Motto: "Kein Compilerfehler, alles Bestens."

    Des Weiteren gibt es auch folgendes zu bemängeln:
    1. Er benutzt keine Initialisierung.
    2. Er benutzt fstream::open und fstream::close .
    3. Keine Ahnung wieso Leute so oft getchar und Co. verwenden. Man kann auch Breakpoints setzen.
    4. Er benutzt rohe Arrays.
    5. Was endl so macht, weiß er offensichtlich auch nicht.


Log in to reply