在C++上将字符分配给多维字符数组时发生逻辑错误
Logical error on assigning a char to a multidimensional char array on C++
我正试图为玩家设置一个可以放置字符的棋盘,在这个例子中,我只使用"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
相关文章:
- 我的字符计数代码计算错误.为什么
- 错误:字符数组的初始值设定项太多
- 需要帮助在 c++ 中将字符串转换为字符 ----错误 "const char *" 类型的值不能用于初始化 "char" 类型的实体
- C++ 字符错误
- CppLint铸造字符*错误
- R data.table 和 STRING_ELT() 错误:如何修复"字符向量"与"字符"错误?
- C URL用UTF8字符错误解码
- C++:如何在 do while 循环中解决字符错误
- 遍历字符* 错误没有从字符* 转换为 int
- Arduino SIM800L:将字符串转换为字符* 错误
- Qt 中的常量字符* 错误行为
- 返回c++中的字符错误数组
- C++:队列中的第一个字符错误
- c++ SFML 按键字符错误
- C++字符*错误,程序崩溃
- 输出字符串/字符错误(c++)
- 将输入字符串转换为字符* <错误 Ptr>
- 井字棋数组字符错误
- c++读取字符串字符错误
- CouchDB UTF-8字符错误