返回值时停止循环

时间:2013-10-13 13:43:54

标签: c arrays loops

这是相关功能:

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]

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

有什么想法?

3 个答案:

答案 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并将第一个位置设置为ab。这是代码:

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;
}