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 weiternehmen wir an feld 1 ist nun X dann ist feld1 != 'X' -> false
folglich steht im while(false||true||true) -> true das programm läuft weiternehmen 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 weiterwenn 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 
-
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!
