Проблема с проверкой условия If в игре крестики-нолики.

В программе идёт двойная проверка if(-ом), первую переменную (первую часть) успешно проверяет. Следующую часть — нет. В else переход по метке goto — не переходит.
Вот код.

include <iostream>

include <conio.h>

using namespace std;
char a[3][3] = {{' ',' ',' '},{' ',' ',' '},{' ',' ',' '}};
void forfor() {
for (int i = 0; i < 3; i++) {
cout << a[i][0] << « | » << a[i][1] << « | » << a[i][2];
if (i < 2) { cout << endl << «—————»; }
cout << endl;
}
}
void noliki() {
S:
int l = 0;
switch (_getch())
{
case 49:l = 1;
break;
case 50:l = 2;
break;
case 51:l = 3;
break;
case 52:l = 4;
break;
case 53:l = 5;
break;
case 54:l = 6;
break;
case 55:l = 7;
break;
case 56:l = 8;
break;
case 57:l = 9;
break;
}
if (l == 1 || l == 2 || l == 3 || l == 4 || l == 5 || l == 6 || l == 7 || l == 8 || l == 9) {
if (l == 1 && a[0][0] == ' ') { a[0][0] = 'O'; }
else
{
goto S;
}
if (l == 2 && a[0][1] == ' ') { a[0][1] = 'O'; }
else
{
goto S;
}
if (l == 3 && a[0][2] == ' ') { a[0][2] = 'O'; }
else
{
goto S;
}
if (l == 4 && a[1][0] == ' ') { a[1][0] = 'O'; }
else
{
goto S;
}
if (l == 5 && a[1][1] == ' ') { a[1][1] = 'O'; }
else
{
goto S;
}
if (l == 6 && a[1][2] == ' ') { a[1][2] = 'O'; }
else
{
goto S;
}
if (l == 7 && a[2][0] == ' ') { a[2][0] = 'O'; }
else
{
goto S;
}
if (l == 8 && a[2][1] == ' ') { a[2][1] = 'O'; }
else
{
goto S;
}
if (l == 9 && a[2][2] == ' ') { a[2][2] = 'O'; }
else
{
goto S;
}

}

}
void iks()
{
L: int l=0;
switch (_getch())
{
case 49:l = 1;
break;
case 50:l = 2;
break;
case 51:l = 3;
break;
case 52:l = 4;
break;
case 53:l = 5;
break;
case 54:l = 6;
break;
case 55:l = 7;
break;
case 56:l = 8;
break;
case 57:l = 9;
break;
}
if (l == 1 || l == 2 || l == 3 || l == 4 || l == 5 || l == 6 || l == 7 || l == 8 || l == 9)
{
if (l == 1 && a[0][0] == ' ') { a[0][0] = 'X'; }
else
{
goto L;
}
if (l == 2 && a[0][1] == ' ') { a[0][1] = 'X'; }
else
{
goto L;
}
if (l == 3 && a[0][2] == ' ') { a[0][2] = 'X'; }
else
{
goto L;
}
if (l == 4 && a[1][0] == ' ') { a[1][0] = 'X'; }
else
{
goto L;
}
if (l == 5 && a[1][1] == ' ') { a[1][1] = 'X'; }
else
{
goto L;
}
if (l == 6 && a[1][2] == ' ') { a[1][2] = 'X'; }
else
{
goto L;
}
if (l == 7 && a[2][0] == ' ') { a[2][0] = 'X'; }
else
{
goto L;
}
if (l == 8 && a[2][1] == ' ') { a[2][1] = 'X'; }
else
{
goto L;
}
if (l == 9 && a[2][2] == ' ') { a[2][2] = 'X'; }
else
{
goto L;
}
}
}
int main() {
setlocale(LC_ALL, «ru»);
iks();
forfor();
noliki();
cout << «\n»;
forfor();
iks();
cout << «\n»;
forfor();
return 0;
}
Программу не дописал до конца т.к решил сначала разобраться с этой проблемой. Функции проверки победы и поражения будут.

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.

Ответить

Вы можете использовать разметку markdown для оформления комментариев и постов. Используйте функцию предпросмотра для проверки корректности разметки.

Пожалуйста, оформляйте исходный код в соответствии с правилами разметки. Для того, чтобы вставить код в комментарий, скопируйте его в текстовое поле ниже, после чего выделите то, что скопировали и нажмите кнопку «код» в панели инструментов. Иначе ваш код может принять нечитаемый вид.

Либо производите оформление кода вручную, следующим образом:

``` #include <iostream> using namespace std; int main() { // ... } ```

Предпросмотр сообщения

Ваше сообщение пусто.