-3

这是相关的功能:

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". 如果是这样,我希望函数返回 a"1"并继续检查。一旦它找到一个不等于"a"它的条目,应该将该条目设置为等于 b,返回 0 并停止循环。

我得到了一些非常奇怪的结果。如果其中[1][1]有一个"a",则该函数什么也不做,只是“冻结”。如果其中[2][2]有 a "a",则该函数正确地将 a"b"放置在 entry 中[1][1]

如果已经填写了其他条目,也会发生这种情况。

有什么想法吗?

4

3 回答 3

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;
}
于 2013-10-13T13:52:34.070 回答
1

我假设你的意思是“我想处理整个数组,如果我找到了 1 则返回 1 a,否则返回 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;
于 2013-10-13T13:51:04.163 回答
0

我不完全理解您所说的“返回 1 并继续检查”是什么意思。我将假设您要扫描整个数组,如果每个位置都是a;则返回 1 否则,返回 0 并设置不是ato的第一个位置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;
}
于 2013-10-13T13:52:32.967 回答