Вот мой исходный код - с помощью которого пользователь может сыграть Ti c Ta c Toe, указав, в каком месте массива char они хотят добавить ноль или крестик -
#include <stdio.h>
#include <iostream>
using namespace std;
int main()
{
char a[3][3] = {{'1', '2', '3'}, {'4', '5', '6'}, {'7', '8', '9'}};
cout << (char)a[0][0] << " " << (char)a[0][1] << " " << (char)a[0][2] << endl << endl << endl;
cout << (char)a[1][0] << " " << (char)a[1][1] << " " << (char)a[1][2] << endl << endl << endl;
cout << (char)a[2][0] << " " << (char)a[2][1] << " " << (char)a[2][2] << endl << endl << endl;
int x, y;
for (int i = 0; i < 5; i ++)
{
cout << "Input x: ";
cin >> x;
cout << "Input y: ";
cin >> y;
system("clear");
a[x-1][y-1] = 'X';
cout << (char)a[0][0] << " " << (char)a[0][1] << " " << (char)a[0][2] << endl << endl << endl;
cout << (char)a[1][0] << " " << (char)a[1][1] << " " << (char)a[1][2] << endl << endl << endl;
cout << (char)a[2][0] << " " << (char)a[2][1] << " " << (char)a[2][2] << endl << endl << endl;
cout << "Input x: ";
cin >> x;
cout << "Input y: ";
cin >> y;
system("clear");
a[x-1][y-1] = 'O';
cout << (char)a[0][0] << " " << (char)a[0][1] << " " << (char)a[0][2] << endl << endl << endl;
cout << (char)a[1][0] << " " << (char)a[1][1] << " " << (char)a[1][2] << endl << endl << endl;
cout << (char)a[2][0] << " " << (char)a[2][1] << " " << (char)a[2][2] << endl << endl << endl;
}
}
. чтобы избежать ввода пользователем индекса массива, который находится за пределами [1,3], я пытаюсь реализовать условие if
if(x <= 0 && x > 3)
{
cout << "Wrong! Enter again. Input x: ";
cin >> x;
}
Это не работает. Поскольку for для l oop повторяется по 5 раз для X и O, либо выход застревает на этапе «Input X», либо просто выходит после 5 «Input X».
Вот что я попробовал - что закончилось взяв 5 X входов и затем просто выйдя -
#include <stdio.h>
#include <iostream>
using namespace std;
int main()
{
char a[3][3] = {{'1', '2', '3'}, {'4', '5', '6'}, {'7', '8', '9'}};
cout << (char)a[0][0] << " " << (char)a[0][1] << " " << (char)a[0][2] << endl << endl << endl;
cout << (char)a[1][0] << " " << (char)a[1][1] << " " << (char)a[1][2] << endl << endl << endl;
cout << (char)a[2][0] << " " << (char)a[2][1] << " " << (char)a[2][2] << endl << endl << endl;
int x, y;
for (int i = 0; i < 5; i ++)
{
cout << "Input x: ";
cin >> x;
if(x <= 0 && x > 3)
{
cout << "Wrong! Enter again. Input x: ";
cin >> x;
continue;
}
else
{
continue;
}
cout << "Input y: ";
cin >> y;
if(y <= 0 && y > 3)
{
cout << "Wrong! Enter again. Input y: ";
cin >> y;
continue;
}
else
{
continue;
}
/*
if(x <= 0 && x > 3)
{
cout << "Wrong! Enter again. Input x: ";
cin >> x;
}
if(y <= 0 && y > 3)
{
cout << "Wrong! Enter again. Input y: ";
cin >> y;
}
*/
system("clear");
a[x-1][y-1] = 'X';
cout << (char)a[0][0] << " " << (char)a[0][1] << " " << (char)a[0][2] << endl << endl << endl;
cout << (char)a[1][0] << " " << (char)a[1][1] << " " << (char)a[1][2] << endl << endl << endl;
cout << (char)a[2][0] << " " << (char)a[2][1] << " " << (char)a[2][2] << endl << endl << endl;
cout << "Input x: ";
cin >> x;
if(x <= 0 && x > 3)
{
cout << "Wrong! Enter again. Input x: ";
cin >> x;
continue;
}
else
{
continue;
}
cout << "Input y: ";
cin >> y;
if(y <= 0 && y > 3)
{
cout << "Wrong! Enter again. Input y: ";
cin >> y;
continue;
}
else
{
continue;
}
/*
if(x <= 0 && x > 3)
{
cout << "Wrong! Enter again. Input x: ";
cin >> x;
}
if(y <= 0 && y > 3)
{
cout << "Wrong! Enter again. Input y: ";
cin >> y;
}
*/
system("clear");
a[x-1][y-1] = 'O';
cout << (char)a[0][0] << " " << (char)a[0][1] << " " << (char)a[0][2] << endl << endl << endl;
cout << (char)a[1][0] << " " << (char)a[1][1] << " " << (char)a[1][2] << endl << endl << endl;
cout << (char)a[2][0] << " " << (char)a[2][1] << " " << (char)a[2][2] << endl << endl << endl;
}
}
Почему я не могу просто иметь оператор if после ввода, в котором он проверяет, находится ли он вне границ, и, если он есть, он может спросить пользователь снова, а затем продолжить? - Это то, что я пытаюсь реализовать.