【发布时间】:2020-01-26 07:25:41
【问题描述】:
这是我的初始代码 - 用户可以使用它来玩井字游戏,方法是指定他们想要在 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 循环对 X 和 O 各迭代 5 次,因此输出要么卡在“输入 X”阶段,要么在 5 个“输入 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 语句,其中它检查它是否超出范围,如果是,它可以再次询问用户,然后继续? - 这是我想要实现的。
【问题讨论】:
-
提示:
for loop正在迭代 5 次,无论用户输入是否错误。您需要继续游戏,直到一位用户success或所有瓷砖都被填满。甚至你可以为输入添加一个循环循环,直到它有效为止。