Wo ist in meinem Code der Fehler?



  • Ich habe gerade ein Projekt gestartet, das um Tic Tac Toe geht.
    Hier der Code:

    // Spielaufbau:
    //   a1 |b1 |c1   
    //   ---|---|---
    //   a2 |b2 |c2   
    //   ---|---|---
    //   a3 |b3 |c3
    //
    //
    
    #include <iostream> 
    #include <string> 
    #include <conio.h> 
    using namespace std; 
    int eingabe = 0;
    string NameS1 = "S1", NameS2 = "S2";
    string leera1 = "   ", leera2 = "   ", leera3 = "   ", leerb1 = "   ", leerb2 = "   ";
    string leerb3 = "   ", leerc1 = "   ", leerc2 = "   ", leerc3 = "   ";
    //string IhrName = "Noch nicht bestimmt";
    int main() 
    { 
    //Spielaufbau:
    
        while (1)
        {
    
        //Spielfeld
            cout << leera1 << "|" << leerb1 << "|" << leerc1 << "\n";
            cout << "---" << "|" << "---" << "|" << "---\n";
            cout << leera2 << "|" << leerb2 << "|" << leerc2 << "\n";
            cout << "---" << "|" << "---" << "|" << "---\n";
            cout << leera3 << "|" << leerb3 << "|" << leerc3 << "\n";
    
        //Eingabe und Folgen
    
            cout << "\n\n";
            cin >> eingabe;
    
            if ((eingabe < 1) || (eingabe > 9)) //then
            {
                    cout << "Eingabe kann nicht bearbeitet werden.\nBitte versuchen sie es erneut!";
                    getch();
                    break;  
    
            }
    
            if ((eingabe > 0) && (eingabe < 10)) //wenn eingabe korrekt ist, dann
            {
                    if (eingabe == 1)
                    {
                                    leera3 = " X ";
                    }
                    if (eingabe == 2)
                    {
                                    leerb3 = " X ";
                    }
                    if (eingabe == 3)
                    {
                                    leerc3 = " X ";
                    }
                    if (eingabe == 4)
                    {
                                    leera2 = " X ";
                    }
                    if (eingabe == 5)
                    {
                                    leerb2 = " X ";
                    }
                    if (eingabe == 6)
                    {
                                    leerc2 = " X ";
                    }
                    if (eingabe == 7)
                    {
                                    leera1 = " X ";
                    }
                    if (eingabe == 8)
                    {
                                    leerb1 = " X ";
                    }
                    if (eingabe == 9)
                    {
                                    leerc1 = " X ";
                    }
    
          }
    
          getch();
    
    }
    

    Ignoriert einfach die if (eingabe == ...), ich weiß, man kann sie auch mit switch(...) machen.

    Ich such schon ne 1/2 Stunde an dem Fehler. Es kommt immer:

    Line [die letzte] prase

    Könnt ihr mir helfen? 😕



  • Hmmm, die Fehlermeldung kenn ich nicht, aber du hast ein "}" vergessen:

    //...
                    if (eingabe == 9)
                    {
                                    leerc1 = " X ";
                    }
          }
          }// Hier hast du das "}" vergessen
          getch();
    
    }
    


  • probier mal so
    habs schnell zusammengehackt, können also noch fehlerchen drin sein...
    dann musst du nur noch das eigentlich interessante implementieren nämlich ob einer gewonnen hat oder nicht

    #include <iostream> 
    using namespace std; 
    
    int sieger(char *spielfeld){ //das musst du noch machen
    
    return 0;
    }
    
    void spielfeld_ausgeben(char *spielfeld){
    
    	for(int i=0;i<3;++i){
    		for(int j=0;j<3;++j)
    			cout<<' '<<spielfeld[j+i*3]<<' '<<(j==2?'\n':'|');
    		if(i<2)cout << "---|---|---\n"; 
    	}
    	cout << "\n\n"; 
    
    }
    
    int main(){
    char eingabe;
    char spielfeld[9]={' ',' ',' ',' ',' ',' ',' ',' ',' '};	
    
        for(int zug=0;zug<9&&!sieger(spielfeld);++zug){ 
    
    		spielfeld_ausgeben(spielfeld);
            cout<<"Spieler "<< 1+zug%2 << "! Bitte machen sie Ihren Zug(0 fuer Spiel beenden)"<<endl;
    		eingabe='n';
    		while(!isdigit(eingabe)){
    			cout<<"Geben Sie eine Zahl von 0 bis 9 ein...";
    			cin >> eingabe; 
    		}
    		if(isdigit(eingabe))
    			if(eingabe!='0')spielfeld[eingabe-1-'0']=zug%2?'O':'X';
    			else break;
    	}
    
    	spielfeld_ausgeben(spielfeld);
    
    }
    


  • Genau, die Klammer hat gefehlt 🙄
    Danke



  • /***************************************************
     Entwurf für Tic-Tac-Toe 
    ***************************************************/
    
    #include <conio.h>  /* getch() */
    #include <iostream> /* cin, cout, endl */
    #include <cctype>   /* isdigit(x) */
    using namespace std;
    
    void wait_ms( unsigned t )
    {
      clock_t start;
      double zeit;
      start = clock();
      do
      {
          zeit = 1000 * ( clock() - start ) / static_cast<float>(CLOCKS_PER_SEC);
      }while( zeit < t );      
    }
    
    class Board /* Spielbrett-Klasse */
    {
      private:
       	char field_[3][3]; /* Spielfeld 3*3 zweidimensionales Array */
       	int  turn_;        /* Wer ist am Zug? Spieler 1: 1 und Spieler 2: 2 */
       	char sign_;        /* Zeichen */
       	int  number_of_turns_; /* Zahl der gültigen Züge */
      public:
       	Board(); /* Konstruktor */
       	bool checkEmpty( int, int ) const; /* Feld frei? */
       	void input();        	           /* Eingabe */
       	void display() const;     		   /* Spielfeld visualisieren */
       	void playGame();
       	void checkStatus();                   /* auf Sieg prüfen */ 
       	void nextplayer();                 /* zwischen Spieler 1 und 2 umschalten */
      private: 
       	int  readNumber(istream & in) const;
       	void clearScreen() const;
    };
    
    Board::Board() : turn_(1), sign_('X'), number_of_turns_(0) 
    {
        /* Alle 9 Positionen auf binäre Null setzen */
       	for( int i = 0; i < 3; ++i )
       		for( int j = 0; j < 3; ++j )
       			field_[i][j] = '\0';	
    }
    
    inline bool Board::checkEmpty( int x, int y ) const
    {
        	return ( field_[x][y] == '\0' );
    }
    
    void Board::input()
    {
      	bool isEmpty;
        int i=1, j=1;		
    
        try
        {  
            do
            { 
              if( (i<1||i>3) || (j<1||j>3) )
                  cout << "Eingabe ( 1 ... 3 ): " << endl;
           	  cout << "Spalte: "; j = readNumber(cin); 
           	  cout << "Reihe:  "; i = readNumber(cin);
           	}
            while
            ( 
                ((i<1||i>3) || (j<1||j>3)) /* Eingabe korrekt? 1...3 */
            ); 
    
            --j; --i; /* Korrektur von 1...3 auf 0...2 */
    
            isEmpty = checkEmpty( i, j );
       	    if( isEmpty ) field_[i][j] = sign_;
       	    else
    	    {
           	    cout << "Feld ist bereits belegt." << endl;
           	    --number_of_turns_;
                wait_ms(500);
           	    nextplayer();
      	    }
        }
        catch( const char * e )
        {
            --number_of_turns_;   
            cerr << e << endl;
            wait_ms(500);
            cin.clear();
            cin.get();
            nextplayer();
        }
        catch(...)
        {
            --number_of_turns_;  
            cerr << "Nicht behebbarer Fehler!" << endl;
            wait_ms(1000);
        }
    }
    
    void Board::display() const
    {
        clearScreen();
        cout << "*** TIC - TAC - TOE ***" << endl << endl;
      	cout << "---+-------+-------+-------+" << endl;
      	cout << "   |   1   |   2   |   3   |"   << endl;
       	cout << "---+-------+-------+-------+"   << endl;
       	for( int i = 0; i < 3; ++i )
        {
        	cout << "  " << i+1 << "|"; /* i+1: 0...2 auf 1...3 korrigieren */
        	for( int j = 0; j < 3; ++j )
            	cout << "   " << field_[i][j] << "   |";
           	cout << endl << "---+-------+-------+-------+" << endl;
        }
        cout << endl;
    }
    
    void Board::playGame()
    {
          	cout << endl << "Spieler " << turn_ 
                 << " bitte Zug eingeben: " << endl;
           	input();
          	display();
            checkStatus();
        	nextplayer();
    }
    
    void Board::nextplayer() 
    {
        	if( turn_ == 1 )
           	{
         		turn_ = 2;
        		sign_ = 'O';
         	}
        	else
         	{
           		turn_ = 1;
          		sign_ = 'X';
        	}
    }
    
    void Board::checkStatus() 
    {
         ++number_of_turns_;
    
         if(
             (field_[0][0] == sign_ && field_[1][0] == sign_ && field_[2][0] == sign_) ||
          	 (field_[0][1] == sign_ && field_[1][1] == sign_ && field_[2][1] == sign_) ||
           	 (field_[0][2] == sign_ && field_[1][2] == sign_ && field_[2][2] == sign_) ||
          	 (field_[0][0] == sign_ && field_[0][1] == sign_ && field_[0][2] == sign_) ||
           	 (field_[1][0] == sign_ && field_[1][1] == sign_ && field_[1][2] == sign_) ||
          	 (field_[2][0] == sign_ && field_[2][1] == sign_ && field_[2][2] == sign_) ||
          	 (field_[0][0] == sign_ && field_[1][1] == sign_ && field_[2][2] == sign_) ||
         	 (field_[0][2] == sign_ && field_[1][1] == sign_ && field_[2][0] == sign_) 
            )
         {
                  display();
                  cout << endl << "Spieler " << turn_ << " hat gewonnen." << endl;
                  getch();
                  exit(0);
         }
         if( number_of_turns_ >= 9 )
         {
             cout << "Spiel endet Unentschieden." << endl;  	
             getch();
             exit(0);
         }
         cout << number_of_turns_ << ". Zug." << endl;
    }
    
    int Board::readNumber( istream & in ) const
    {
        int i;
        in >> i;
        if(in.fail())
            throw "Eingabefehler!";
        if(in.bad())  
            throw; /* nicht behebbarer Fehler */
        return i;    
    }
    
    void  Board::clearScreen() const
    {
        wait_ms(200);
        system("cls");
    }
    
    int main()
    {
        Board b;
        b.display();
        for(;;)
        	b.playGame();
    }
    

Anmelden zum Antworten