这是相关功能:
int computerChoice() {
int x, y;
for (y=0;y<=2;y++) {
for (x=0;x<=2;x++) {
if (matrix[y][x] == 'a') {
return(1);
} else {
matrix[y][x] = 'b';
return(0);
}
}
}
}
这是相关的main()
代码:
char matrix[3][3];
int duplicate1 = 0;
do {
duplicate1 = computerChoice();
} while(duplicate1 == 1);
我正在尝试扫描3x3
二维数组并按顺序检查每个数组是否等于"a"
。如果是这样,我希望函数返回"1"
并继续检查。一旦找到不等于"a"
的条目,它应该将该条目设置为等于b,返回0并停止循环。
我得到了一些非常奇怪的结果。如果[1][1]
中包含"a"
,则该函数不会执行任何操作,只会“冻结”。如果[2][2]
中包含"a"
,则该函数会在条目"b"
中正确放置[1][1]
。
如果已填写其他条目,也会发生这种情况。
有什么想法?
答案 0 :(得分:2)
你的实现似乎有问题,代码应该继续,直到它在每个单元格中找到'a'。如果它没有找到'a',它应该将它设置为'b'并返回0.循环将自动停止当你返回。 如果循环完成,则意味着矩阵中的每个单元格都包含“a”。你应该返回1;
int computerChoice() {
int x, y;
for (y=0;y<=2;y++) {
for (x=0;x<=2;x++) {
if (matrix[y][x] == 'a') {
continue;
}
else {
matrix[y][x] = 'b';
return(0);
}
}
}
return 1;
}
答案 1 :(得分:1)
我假设你的意思是“我想处理整个数组,如果我找到a
则返回1,否则返回0”。这可以这样实现:
int found = 0;
for (size_t i = 0; i != 3; ++i)
{
for (size_t j = 0; j != 3; ++j)
{
if (matrix[i][j] == 'a') { found = 1; }
else { matrix[i][j] = 'b'; }
}
}
return found;
(通过更改为++found
,您还可以返回'a'
出现的数字。)
另一方面,如果您知道数据中存在非'a'
,则您希望立即返回0,这更简单:
for (size_t i = 0; i != 3; ++i)
for (size_t j = 0; j != 3; ++j)
if (matrix[i][j] != 'a') { matrix[i][j] = 'b'; return 0; }
return 1;
答案 2 :(得分:0)
我并不完全明白你的意思是“返回1并继续检查”。我假设您要扫描整个数组,如果每个位置都是a
则返回1;否则,返回0并将第一个位置设置为a
到b
。这是代码:
int computerChoice() {
int x, y;
for (y=0;y<=2;y++) {
for (x=0;x<=2;x++) {
if (matrix[y][x] != 'a') {
matrix[y][x] = 'b';
return 0;
}
}
}
return 1;
}