我正在尝试为玩家设置一个用于放置角色的棋盘,对于这个例子,我只是使用' 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;
}
当电路板重新出现在屏幕上运行此代码后,所有字符仍然是“#”;没有任何变化。
答案 0 :(得分: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 而不是||
或的原因。
而不是
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] << '|';
答案 1 :(得分:0)
而不是:
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