我正试图为玩家设置一个可以放置字符的棋盘,在这个例子中,我只使用"R"。但当玩家输入角色,程序显示棋盘时,不会发生任何变化。到目前为止,我不知道出了什么问题,我正在寻找一些线索。
我应该说,这在Python上是一件非常容易的事情,但我刚刚进入C++,学习曲线很陡峭。
这是代码:
char matrix[9][9];
void doBoard()
{
for (int i = 1; i <= 10; i++)
{
for (int j = 1; j <= 10; j++)
{
if ((matrix[i][j] != 'R') || (matrix[i][j] != 'O'))
{
matrix[i][j] = '_';
std::cout << '|' << matrix[i][j] << '|';
}
}
std::cout << "n";
}
}
void pickR()
{
int column;
int row;
std::cout << "nThe columns and rows are enumerated from 1 to 10.n";
std::cout << "Select the column and row where you would like to set your piece.n";
std::cout << "Column (1-10): ";
std::cin >> column;
std::cout << "Row (1-10): ";
std::cin >> row;
matrix[column - 1][row - 1] = 'R';
std::cout << matrix[column][row] << "n";
main()
{
doboard();
pickR();
doboard();
return 0;
}
运行此代码后,当板再次出现在屏幕上时,所有字符仍然是"_",没有任何变化。
我看到有一些语法错误,你可以在熟悉C++语法后消除这些错误,但你的逻辑错误是:
char matrix[9][9];
记住,C++使用零索引。
因此,matrix
是一个2D数组,具有列索引0-8
和行索引0-8
,因此以下循环可以为您提供未定义的行为,
for (int i = 1; i <= 10; i++) {
for (int j = 1; j <= 10; j++) {
if ((matrix[i][j] != 'R') || (matrix[i][j] != 'O'))
所以重写它们,
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9; j++) {
if ((matrix[i][j] != 'R') || (matrix[i][j] != 'O'))
对于以下线路,
if ((matrix[i][j] != 'R') || (matrix[i][j] != 'O'))
假设matrix[i][j]
包含R
,则matrix[i][j] != 'R'
将为false,但matrix[i][j] != 'O'
将为true
。因此,if
块将被执行,并用_
替换R
,这是您所没有想到的。这就是为什么使用&&
AND而不是||
OR。
代替
if ((matrix[i][j] != 'R') || (matrix[i][j] != 'O'))
{
matrix[i][j] = '_';
std::cout << '|' << matrix[i][j] << '|';
}
使用,
if ((matrix[i][j] != 'R') && (matrix[i][j] != 'O'))
{
matrix[i][j] = '_';
}
std::cout << '|' << matrix[i][j] << '|';
而不是这个:
for (int j = 1; j <= 10; j++)
{
if ((matrix[i][j] != 'R') || (matrix[i][j] != 'O'))
{
matrix[i][j] = '_';
std::cout << '|' << matrix[i][j] << '|';
}
}
这样做:
for (int j = 0; j < 9; j++) // 0 to 8, not 1 to 10
{
if ((matrix[i][j] != 'R') && (matrix[i][j] != 'O'))
{
matrix[i][j] = '_';
}
std::cout << '|' << matrix[i][j] << '|'; // Should be outside the if if you want to print all the matrix
}
而不是这个:
matrix[column - 1][row - 1] = 'R';
std::cout << matrix[column][row] << "n";
这样做:
matrix[column - 1][row - 1] = 'R';
std::cout << matrix[column-1][row-1] << "n"; // You will always print the element you changed instead of one not related at all