while-schleife



  • Ok muss leider sagen hat nicht funzt...
    weis nicht woran es liegt... bin zu doof : D
    naja ich werde mal meinen Freund / Kollegen fragen... der macht das auch beruflich... der kann mir bestimmt helfen, weiss hallt nur nicht wann ich den wieder sehe...
    naja ich bedanke mich trozdem...



  • Bei mir gehts... Bitte bachte die Klammern und das UND

    while((cFeld1 != cPlayer1 || cFeld2 != cPlayer1 || cFeld3 != cPlayer1) && (cFeld4 != cPlayer1 || cFeld5 != cPlayer1 || cFeld6 != cPlayer1))



  • Ja hab ich.. aber weiss nicht woran es liegt... naja egal



  • WOW... es geht...
    als ich es von dir copy hatte gings DANKEEEE
    ich denke ich hatte mich vertippt oder so...
    wirklich cool : D so schnell und es funzt... 😃 danke 😉



  • Falls ihr es mal sehen wollt... ich habe es bis auf ein paar kleinigkeiten fertig.
    Aber hier ist der Code:

    /*Tic-Tac-Toe*/
    #include <iostream>
    #include <conio.h>
    
    using namespace std;
    
    int main()
    {
    	char cFeld1 = '1',
    			 cFeld2 = '2',
    			 cFeld3 = '3',
    			 cFeld4 = '4',
    			 cFeld5 = '5',
    			 cFeld6 = '6',
    			 cFeld7 = '7',
    			 cFeld8 = '8',
    			 cFeld9 = '9';
    
    		char cPlayer1 = 'X',
    			 cPlayer2 = 'O';
    
    		char cjn;
    
    		int iEingabe = 0 ;
    
    		/* Anleitung */
    		cout << "Bitte gebe die Zahl des Feldes ein, und bestätige mit der [Enter]-Taste!";
    		system("pause>nul");
    
    	do
    	{
    
    		/* Zu Player 1 */
    		wieder1:
    		system("cls");
    		do
    		{
    			iEingabe = 0 ;
    
    			cout << cFeld1 << " | " << cFeld2 << " | " << cFeld3 << endl
    				 <<          "--+-" <<          "--+--" << endl
    				 << cFeld4 << " | " << cFeld5 << " | " << cFeld6 << endl
    				 <<          "--+-" <<          "--+--" << endl
    				 << cFeld7 << " | " << cFeld8 << " | " << cFeld9 << endl
    				 << endl
    				 << "Player 1 ist an der Reihe." << endl;
    
    		cin >> iEingabe;
    			//	iEingabe = getch();
    			system("cls");
    		}
    		while(iEingabe > 9 || iEingabe < 1 );
    
    		switch(iEingabe)
    		{
    			case 1:
    				if(cFeld1 == '1')
    				{
    					cFeld1 = cPlayer1;
    				}
    				else
    				{
    					cout << "Feld schon belegt!";
    					system("pause>nul");
    					goto wieder1;
    				}
    					break;
    
    			case 2:
    				if(cFeld2 == '2')
    				{
    					cFeld2 = cPlayer1;
    				}
    				else
    				{
    					cout << "Feld schon belegt!";
    					system("pause>nul");
    					goto wieder1;
    				}
    				break;
    
    			case 3:
    				if(cFeld3 == '3')
    				{
    					cFeld3 = cPlayer1;
    				}
    				else
    				{
    					cout << "Feld schon belegt!";
    					system("pause>nul");
    					goto wieder1;
    				}
    				break;
    
    			case 4:
    				if(cFeld4 == '4')
    				{
    					cFeld4 = cPlayer1;
    				}
    				else
    				{
    					cout << "Feld schon belegt!";
    					system("pause>nul");
    					goto wieder1;
    				}
    				break;
    
    			case 5:
    				if(cFeld5 == '5')
    				{
    					cFeld5 = cPlayer1;
    				}
    				else
    				{
    					cout << "Feld schon belegt!";
    					system("pause>nul");
    					goto wieder1;
    				}
    				break;
    
    			case 6:
    				if(cFeld6 == '6')
    				{
    					cFeld6 = cPlayer1;
    				}
    				else
    				{
    					cout << "Feld schon belegt!";
    					system("pause>nul");
    					goto wieder1;
    				}
    				break;
    
    			case 7:
    				if(cFeld7 == '7')
    				{
    					cFeld7 = cPlayer1;
    				}
    				else
    				{
    					cout << "Feld schon belegt!";
    					system("pause>nul");
    					goto wieder1;
    				}
    				break;
    
    			case 8:
    				if(cFeld8 == '8')
    				{
    					cFeld8 = cPlayer1;
    				}
    				else
    				{
    					cout << "Feld schon belegt!";
    					system("pause>nul");
    					goto wieder1;
    				}
    				break;
    
    			case 9:
    				if(cFeld9 == '9')
    				{
    					cFeld9 = cPlayer1;
    				}
    				else
    				{
    					cout << "Feld schon belegt!";
    					system("pause>nul");
    					goto wieder1;
    				}
    				break;
    		}
    
    		/* Zu Player 2 */
    		wieder2:
    		system("cls");
    		do
    		{
    			iEingabe = 0 ;
    
    			cout << cFeld1 << " | " << cFeld2 << " | " << cFeld3 << endl
    				 <<          "--+-" <<          "--+--" << endl
    				 << cFeld4 << " | " << cFeld5 << " | " << cFeld6 << endl
    				 <<          "--+-" <<          "--+--" << endl
    				 << cFeld7 << " | " << cFeld8 << " | " << cFeld9 << endl
    				 << endl
    				 << "Player 2 ist an der Reihe." << endl;
    
    			cin >> iEingabe;
    			//iEingabe = getch();
    			system("cls");
    		}
    		while(iEingabe > 9 || iEingabe < 1 );
    
    		switch(iEingabe)
    		{
    			case 1:
    				if(cFeld1 == '1')
    				{
    					cFeld1 = cPlayer2;
    				}
    				else
    				{
    					cout << "Feld schon belegt!";
    					system("pause>nul");
    					goto wieder2;
    				}
    				break;
    
    			case 2:
    				if(cFeld2 == '2')
    				{
    					cFeld2 = cPlayer2;
    				}
    				else
    				{
    					cout << "Feld schon belegt!";
    					system("pause>nul");
    					goto wieder2;
    				}
    				break;
    
    			case 3:
    				if(cFeld3 == '3')
    				{
    					cFeld3 = cPlayer2;
    				}
    				else
    				{
    					cout << "Feld schon belegt!";
    					system("pause>nul");
    					goto wieder2;
    				}
    				break;
    
    			case 4:
    				if(cFeld4 == '4')
    				{
    					cFeld4 = cPlayer2;
    				}
    				else
    				{
    					cout << "Feld schon belegt!";
    					system("pause>nul");
    					goto wieder2;
    				}
    				break;
    
    			case 5:
    				if(cFeld5 == '5')
    				{
    					cFeld5 = cPlayer2;
    				}
    				else
    				{
    					cout << "Feld schon belegt!";
    					system("pause>nul");
    					goto wieder2;
    				}
    				break;
    
    			case 6:
    				if(cFeld6 == '6')
    				{
    					cFeld6 = cPlayer2;
    				}
    				else
    				{
    					cout << "Feld schon belegt!";
    					system("pause>nul");
    					goto wieder2;
    				}
    				break;
    
    			case 7:
    				if(cFeld7 == '7')
    				{
    					cFeld7 = cPlayer2;
    				}
    				else
    				{
    					cout << "Feld schon belegt!";
    					system("pause>nul");
    					goto wieder2;
    				}
    				break;
    
    			case 8:
    				if(cFeld8 == '8')
    				{
    					cFeld8 = cPlayer2;
    				}
    				else
    				{
    					cout << "Feld schon belegt!";
    					system("pause>nul");
    					goto wieder2;
    				}
    				break;
    
    			case 9:
    				if(cFeld9 == '9')
    				{
    					cFeld9 = cPlayer2;
    				}
    				else
    				{
    					cout << "Feld schon belegt!";
    					system("pause>nul");
    					goto wieder2;
    				}
    				break;
    		}
    
    	}
    	while((cFeld1 != cPlayer1 || cFeld2 != cPlayer1 || cFeld3 != cPlayer1) && (cFeld4 != cPlayer1 || cFeld5 != cPlayer1 || cFeld6 != cPlayer1) && (cFeld7 != cPlayer1 || cFeld8 != cPlayer1 || cFeld9 != cPlayer1)&& (cFeld1 != cPlayer1 || cFeld4 != cPlayer1 || cFeld7 != cPlayer1)&& (cFeld2 != cPlayer1 || cFeld5 != cPlayer1 || cFeld8 != cPlayer1)&& (cFeld3 != cPlayer1 || cFeld6 != cPlayer1 || cFeld9 != cPlayer1)&& (cFeld3 != cPlayer1 || cFeld5 != cPlayer1 || cFeld7 != cPlayer1)&& (cFeld1 != cPlayer1 || cFeld5 != cPlayer1 || cFeld9 != cPlayer1)&&//Möglichkeiten zu Player 1
    		  (cFeld1 != cPlayer2 || cFeld2 != cPlayer2 || cFeld3 != cPlayer2) && (cFeld4 != cPlayer2 || cFeld5 != cPlayer2 || cFeld6 != cPlayer2) && (cFeld7 != cPlayer2 || cFeld8 != cPlayer2 || cFeld9 != cPlayer2)&& (cFeld1 != cPlayer2 || cFeld4 != cPlayer2 || cFeld7 != cPlayer2)&& (cFeld2 != cPlayer2 || cFeld5 != cPlayer2 || cFeld8 != cPlayer2)&& (cFeld3 != cPlayer2 || cFeld6 != cPlayer2 || cFeld9 != cPlayer2)&& (cFeld3 != cPlayer2 || cFeld5 != cPlayer2 || cFeld7 != cPlayer2)&& (cFeld1 != cPlayer2 || cFeld5 != cPlayer2 || cFeld9 != cPlayer2));//Möglichkeiten zu Player 2
    	cout << "Player wins" << endl
    		 << "Nocheinmal? (j/n)";
    	cin >> cjn;
    	if(cjn == 'j')
    	{
    		goto wieder1;
    		system("cls");
    	}
    	else
    	{
    		return 0;
    	}
    }
    

    Und ich möchte mich noch einmal bedanken! 👍 👍 👍



  • Und wenn du noch ein wenig weiter gelesen hast, dann überarbeitest du das ganze erstmal gründlich ^^



  • Wiso was ist denn noch nicht so gut???
    Mhh man merkt wohl das ich noch en anfänger bin 😃



  • Die Verwendung von goto, die Abwesenheit von Arrays, die Abwesenheit von Funktionen die zu Codeverdoppelung führen. Aber für einen Anfänger ist es ok.



  • Ja ich weiss das der Befehl goto als Schlampig gilt 😃 wussta aber nicht direkt, wie ich es vermeiden soll : D arrys wollte ich als name nutzen statt diesem player1 und player2...
    und funktionen hab ich noch nicht so verstanden : D ...
    naja ich bin froh, das ich es überhaupt hinbekommen hab... zwar nicht ohne hilfe aber egal 😃



  • Gastschorry schrieb:

    Ja ich weiss das der Befehl goto als Schlampig gilt 😃 wussta aber nicht direkt, wie ich es vermeiden soll : D

    goto könntest du mit Schleifen eliminieren. Du verwendest goto ja immer, wenn ein Feld schon belegt ist. Stattdessen könntest du um die Eingabe für einen Spieler einfach ein while(bFeldBelegt) packen. bFeldBelegt ist ein bool und wird erst false, wenn der Spieler eine gültige Eingabe macht.

    Gastschorry schrieb:

    arrys wollte ich als name nutzen statt diesem player1 und player2...

    😕 Meinst du jetzt, du willst char-Arrays nutzen, um Spielernamen festzuhalten? Das ginge natürlich, du könntest aber auch den wesentlich komfortableren C++-Typen string verwenden. HighLigerBiMBam meinte eher was anderes. Ich habe deinen Code nur ganz kurz überflogen, aber schon die ganzen cFeldx-Variablen könnte man einfach in ein Array packen. Das macht die Sache übersichtlicher und erlaubt z.B. auch das Verarbeiten aller Elemente des Arrays in Schleifen. Mit deinen Einzel-Variablen könntest du sowas nicht.

    Gastschorry schrieb:

    und funktionen hab ich noch nicht so verstanden : D ...

    Dann solltest du dich besser heute als morgen damit beschäftigen. Funktionen sind essentiell wichtig. Sie erlauben, wiederkehrende Funktionalität ohne Redundanz (doppelten Code) zu implementieren. Außerdem behältst du nur die Übersicht, wenn du Funktionaltät in Funktionen (und auch Klassen) unterbringst. Stell dir vor, du hast irgendwann ein Programm von 20000 Zeilen. Wenn die alle untereinandergeklatscht sind, blickst du höchstwahrscheinlich nicht mehr durch. Das Suchen von bestimmten Stellen wird zur Qual. Wenn aber alles in kleinen, handlichen Funktionen von nur wenigen Zeilen verpackt ist, lässt sich das alles wesentlich leichter handhaben.

    Kleines Beispiel:

    Sagen wir mal, du willst (warum auch immer 😉 ) mehrfach Multiplikationen durchführen und das Ergebnis auf der Konsole ausgeben.

    So sieht es ohne Funktion aus (jede Menge redundanter Code, unschön):

    #include <iostream>
    
    using namespace std;
    
    int main() {
      cout << "Das Produkt von " << 2 << " und " << 3 << " ist " << 2*3 << ".";
      cout << "Das Produkt von " << 6 << " und " << 8 << " ist " << 6*8 << ".";
      cout << "Das Produkt von " << 9 << " und " << 5 << " ist " << 9*5 << ".";
      cout << "Das Produkt von " << 3 << " und " << 6 << " ist " << 3*6 << ".";
      cout << "Das Produkt von " << 4 << " und " << 1 << " ist " << 4*1 << ".";
      cout << "Das Produkt von " << 0 << " und " << 9 << " ist " << 0*9 << ".";
      cout << "Das Produkt von " << 5 << " und " << 4 << " ist " << 5*4 << ".";
      cout << "Das Produkt von " << 5 << " und " << 4 << " ist " << 5*4 << ".";
      cout << "Das Produkt von " << 2 << " und " << 6 << " ist " << 2*6 << ".";
      cout << "Das Produkt von " << 7 << " und " << 7 << " ist " << 7*7 << ".";
    }
    

    Und so könnte es mit einer Funktion aussehen:

    #include <iostream>
    
    using namespace std;
    
    void druckeProdukt(int a,int b) {
      cout << "Das Produkt von " << a << " und " << b << " ist " << a*b << ".";
    }
    
    int main() {
      druckeProdukt(2,3);  
      druckeProdukt(6,8);  
      druckeProdukt(9,5);  
      druckeProdukt(3,6);  
      druckeProdukt(4,1);  
      druckeProdukt(0,9);  
      druckeProdukt(5,4);  
      druckeProdukt(5,4);  
      druckeProdukt(2,6);  
      druckeProdukt(7,7);  
    }
    

    Und nun bedenke noch, dass du im letzteren Fall ganz einfach die Funktionalität deines Programms ändern kannst. Wenn z.B. der Text anders sein soll, musst du nur eine Stelle (nämlich die Funktion) ändern, anstatt in 10 Zeilen rumzupfuschen.

    Gastschorry schrieb:

    naja ich bin froh, das ich es überhaupt hinbekommen hab... zwar nicht ohne hilfe aber egal 😃

    Ist doch schon mal was. Übung macht den Meister! 🙂


Anmelden zum Antworten