c++ - 如何在 C++ 中循环遍历二维数组?
问题描述
我试图弄清楚如何水平垂直、对角地和子对角地循环遍历二维数组,以查看数组是否等于 char。如果数组等于 char,那么 abool
应该返回 true,但我的问题是bool
随机返回真。bool
如果 char 等于特定列和行的数组,则唯一返回 true 。在这里,我对其进行了硬编码,但我想使用 for 循环来完成。让我知道您是否需要更多信息或需要解释的内容
if (mCard[0][0] == '*' && mCard[0][1] == '*'&& mCard[0][2] == '*'&& mCard[0][3] == '*' && mCard[0][4] == '*') {
CheckBingo = true;
}
if (mCard[1][0] == '*' && mCard[1][1] == '*'&& mCard[1][2] == '*'&& mCard[1][3] == '*' && mCard[1][4] == '*') {
CheckBingo = true;
}
if (mCard[2][0] == '*' && mCard[2][1] == '*'&& mCard[2][2] == '*'&& mCard[2][3] == '*' && mCard[2][4] == '*') {
CheckBingo = true;
}
if (mCard[3][0] == '*' && mCard[3][1] == '*'&& mCard[3][2] == '*'&& mCard[3][3] == '*' && mCard[3][4] == '*') {
CheckBingo = true;
}
if (mCard[4][0] == '*' && mCard[4][1] == '*'&& mCard[4][2] == '*'&& mCard[4][3] == '*' && mCard[4][4] == '*') {
CheckBingo = true;
}
if (mCard[0][0] == '*' && mCard[1][0] == '*'&& mCard[2][0] == '*'&& mCard[3][0] == '*' && mCard[4][0] == '*') {
CheckBingo = true;
}
if (mCard[0][1] == '*' && mCard[1][1] == '*'&& mCard[2][1] == '*'&& mCard[3][1] == '*' && mCard[4][1] == '*') {
CheckBingo = true;
}
if (mCard[0][2] == '*' && mCard[1][2] == '*'&& mCard[2][2] == '*'&& mCard[3][2] == '*' && mCard[4][2] == '*') {
CheckBingo = true;
}
if (mCard[0][3] == '*' && mCard[1][3] == '*'&& mCard[2][3] == '*'&& mCard[3][3] == '*' && mCard[4][3] == '*') {
CheckBingo = true;
}
if (mCard[0][4] == '*' && mCard[1][4] == '*'&& mCard[2][4] == '*'&& mCard[3][4] == '*' && mCard[4][4] == '*') {
CheckBingo = true;
}
// checking for daigonal
if (mCard[0][0] == '*' && mCard[1][1] == '*'&& mCard[2][2] == '*'&& mCard[3][3] == '*' && mCard[4][4] == '*') {
CheckBingo = true;
}
// checking for sub diagonal
if (mCard[4][0] == '*' && mCard[3][1] == '*'&& mCard[2][2] == '*'&& mCard[1][3] == '*' && mCard[0][4] == '*') {
CheckBingo = true;
}
int
在这里,我尝试使用 for 循环,但如果数组等于 char,它总是返回 true。
for(int row = 0; row < 5; row++) {
for(int col = 0; col < 5; col++) {
if(mCard[row][col] == '*') {
CheckBingo = true;
}
else {
CheckBingo = false;
break;
}
}
}
for(int row = 0; row < 5; row++) {
for(int col = 0; col < 5; col++) {
if(mCard[col][row] == '*') {
CheckBingo = true;
}
else {
CheckBingo = false;
break;
}
}
}
解决方案
mCard[col][row] ...
row
并且col
必须翻转。
然后,假设设置了匹配项,则开始循环。如果其中一个单元格不匹配,则匹配为假。请参见下面的示例。
确保值已初始化。
int main()
{
char mCard[5][5] = {
'*','x','*','*','*',
'*','*','*','*','*',
'*','*','*','*','*',
'*','*','x','*','*',
'*','*','*','*','*',
};
bool CheckBingo = true;
for(int row = 0; row < 5; row++)
{
CheckBingo = true;
for(int col = 0; col < 5 && CheckBingo; col++)
{
if(mCard[row][col] != '*')
CheckBingo = false;
}
if(CheckBingo)
cout << "bingo on row " << row << "\n";
}
bool match = true;
for(int row = 0; row < 5 && match; row++)
for(int col = 0; col < 5 && match; col++)
if(mCard[row][col] != '*')
match = false;
if(match) cout << "bingo for all lines\n";
match = true;
for(int i = 0; i < 5 && match; i++)
if(mCard[i][i] != '*')
match = false;
if(match) cout << "top-left to bottom-right match\n";
match = true;
for(int i = 0; i < 5 && match; i++)
if(mCard[i][4-i] != '*')
match = false;
if(match) cout << "top-right to bottom-left match\n";
return 0;
}
推荐阅读
- machine-learning - 在 Solr 中搜索向量与所有其他向量
- java - 如何测试(反应流驱动程序的)MongoClient 是否实际连接?
- python - 使用不同部分的 TextFSM 解析输出
- laravel - Laravel Socialite for Apple 的问题:未来发行的 Token
- java - Java中的二维层次聚类库
- winapi - 没有 DLL 的 Win32 应用程序本地化 (VS2010)
- swift - 如何在构建 Vapor 应用程序时修复错误?
- python - 在谷歌驱动器中使用 ipynb 运行代码时出现问题
- javascript - Astro 正在尝试加载 js 布局而不是 astro
- c++ - 使用 GLEW 和 GLFW 在 freetype C++ 中动态更改字体