while-schleife



  • Hallo Leute,
    ich habe ein Problem in meinem Code. Ich möchte ein Tic-Tac-Toe spiel in einer Konsole Programmieren. Jetzt habe ich das ganze Programmiert, und wollte ihm hetzt sagen (mit einer while Schleife), mache das so lang, bis cFeld1,cFeld2,cFeld3 != 'X' ('O') ist.
    Wenn ich das so machte, :

    while(cFeld1,cFeld2,cFeld3 != 'X')
    {}
    

    so allerdings nicht mehr 😞 :

    while(cFeld1,cFeld2,cFeld3 != 'X' || cFeld4,cFeld5,cFeld6 != 'X')
    {}
    

    Könnt ihr mir bitte helfen?
    Danke im Vorhinein.



  • verwende && anstatt ||



  • Wenn du erwartest, dass alle drei mit Komma getrennten Felder verglichen werden, muss ich dich enttäuschen. Du musst jedes Feld einzeln vergleichen und mit && (oder ||) verknüpfen.



  • Das hab ich auch schon probiert... ist das gleiche ergebnis wie mit komma.



  • Ok mit && hab ich es auch gerade versucht, und hab das Ergebnis herausbekommen, was ich vermutet hatte, und zwar müssen dann Feld 1,2,3,4,5 und 6 den Wert 'X' haben...
    P.S. das mit dem Komma ist fast das gleiche wie &&

    z.B. ist das das gleiche :

    while(cFeld1,cFeld2 != 'X')
    //und
    while(cFeld1 && cFeld2 != 'X')
    

    Ich Schreib ma eben den kompletten Quelltext, villeicht versteht ihr mich dann. :

    /*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';
    
    		int iEingabe = 0 ;
    
    	while(cFeld1,cFeld2,cFeld3 != 'X' && cFeld4,cFeld5,cFeld6 != 'X' )		//while(cFeld1,cFeld2,cFeld3 != 'X' || cFeld4,cFeld5,cFeld6 != 'X' || cFeld7,cFeld8,cFeld9 != 'X' || cFeld1,cFeld4,cFeld7 != 'X' || cFeld2,cFeld5,cFeld8 != 'X' || cFeld3,cFeld6,cFeld9 != 'X'|| cFeld1,cFeld5,cFeld9 != 'X' || cFeld3,cFeld5,cFeld7 != 'X'				 ||					cFeld1,cFeld2,cFeld3 != 'O' || cFeld4,cFeld5,cFeld6 != 'O' || cFeld7,cFeld8,cFeld9 != 'O' || cFeld1,cFeld4,cFeld7 != 'O' || cFeld2,cFeld5,cFeld8 != 'O' || cFeld3,cFeld6,cFeld9 != 'O'|| cFeld1,cFeld5,cFeld9 != 'O' || cFeld3,cFeld5,cFeld7 != 'O' )
    	{
    
    		/* Zu Player 1 */
    		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:
    				cFeld1 = cPlayer1;
    				break;
    
    			case 2:
    				cFeld2 = cPlayer1;
    				break;
    
    			case 3:
    				cFeld3 = cPlayer1;
    				break;
    
    			case 4:
    				cFeld4 = cPlayer1;
    				break;
    
    			case 5:
    				cFeld5 = cPlayer1;
    				break;
    
    			case 6:
    				cFeld6 = cPlayer1;
    				break;
    
    			case 7:
    				cFeld7 = cPlayer1;
    				break;
    
    			case 8:
    				cFeld8 = cPlayer1;
    				break;
    
    			case 9:
    				cFeld9 = cPlayer1;
    				break;
    		}
    
    		/* Zu Player 2 */
    		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:
    				cFeld1 = cPlayer2;
    				break;
    
    			case 2:
    				cFeld2 = cPlayer2;
    				break;
    
    			case 3:
    				cFeld3 = cPlayer2;
    				break;
    
    			case 4:
    				cFeld4 = cPlayer2;
    				break;
    
    			case 5:
    				cFeld5 = cPlayer2;
    				break;
    
    			case 6:
    				cFeld6 = cPlayer2;
    				break;
    
    			case 7:
    				cFeld7 = cPlayer2;
    				break;
    
    			case 8:
    				cFeld8 = cPlayer2;
    				break;
    
    			case 9:
    				cFeld9 = cPlayer2;
    				break;
    		}
    
    	}
    	system("pause>nul");
    	return 0;
    }
    


  • while(cFeld1,cFeld2 != 'X') 
    //und 
    while(cFeld1 && cFeld2 != 'X')
    

    Geht so nicht.

    Ist zwar jetzt nur Fleißarbeit, aber es geht so:

    while(cFeld != 'X' && cFeld2 != 'X')
    


  • Cybertec schrieb:

    while(cFeld1,cFeld2 != 'X') 
    //und 
    while(cFeld1 && cFeld2 != 'X')
    

    Geht so nicht.

    Ist zwar jetzt nur Fleißarbeit, aber es geht so:

    while(cFeld != 'X' && cFeld2 != 'X')
    

    Nichts anderes wurde dir oben gesagt: Du sollst && verwenden und Komma funktioniert nicht, weil du jeden Wert einzeln prüfen musst.



  • ja meinte (↓) ich ja sorry

    while(cFeld1 != 'X' && cFeld2 != 'X')
    

    okay... aber warum geht es trozdem nicht wenn ich es so mache???



  • "Es funktioniert nicht" ist keine passende Fehlerbeschreibung.



  • Das heisst was?
    Was muss ich dann machen das es geht?



  • while((cFeld1 != cPlayer1 || cFeld2 != cPlayer1 || cFeld3 != cPlayer1) && ....)
    


  • Mir ist gerade noch etwas aufgefallen:
    Wenn ich schreibe :

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

    dann beendet er nur, wenn entweder in feld 1,2, und 3 ein 'x' ist UND in 4,5 und 6 kein 'O' oder wenn in 4,5 oder 6 ein 'X' ist aber KEINS in 1,2 oder 3 ...



  • Ja aber bei der Schreibweise, beendet er dann ja schon, wenn bei 1, 2 ODER 3 ein 'X' ist... der soll ja erst beenden, wenn bei 1,2 UND 3 ein 'X' ist...



  • Meins ist richtig. Ich versuche es dir zu erklären:

    Wenn nirgends ein x steht, dann ist feld1 != 'X' -> true
    folglich steht im while(true || true || true) -> true das programm läuft weiter

    nehmen wir an feld 1 ist nun X dann ist feld1 != 'X' -> false
    folglich steht im while(false||true||true) -> true das programm läuft weiter

    nehmen wir an feld 1 und feld 2 ist nun X dann ist feld1 != 'X' -> false
    folglich steht im while(false||false||true) -> true das programm läuft weiter

    wenn jetzt feld 1, feld 2 und feld 3 = 'X' sind, dann sind sie alle false
    folglich steht im while(false || false || false) -> false schleife endet



  • Ah stimmt...
    das erscheint mir logisch... danke ich werds ausprbieren, und wenn es nicht funkt. werdich mich wieder melden...
    Danke aber erst mal...



  • Ich habe mir dran auch gerade meinen Kopf zerbrochen bis ich es mir mal aufschrieb...



  • 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 😉


Anmelden zum Antworten