C语言 为什么这个j在声明时被认为是未声明的标识符

5cnsuln7  于 2022-12-11  发布在  其他
关注(0)|答案(2)|浏览(182)

printing语句中的j被认为是未声明的标识符,如何修复此问题?

for (int i = 0; i < 9; i++) {
    for (int j = 0; j < 9; j++)
        switch(grid[i][j]){
            case '.':
                colourChange(WHITE);
                break;
            case 'P':
                colourChange(YELLOW);
                break;
            case 'G':
                colourChange(PINK);
                break;
            case 'W':
                colourChange(BLUE);
                break;}
        printf("%c  ", grid[i][j]);
    printf("\n");
}

我在for循环中声明了它,但是它给出了一个错误。另外,如果我注解掉完整的switch语句,它就可以工作了。

b09cbbtk

b09cbbtk1#

内部for循环的主体 * 只是 * switch语句,因此后面对printf的调用在内部循环之外。
始终使用大括号:

for (int i = 0; i < 9; i++) {
    for (int j = 0; j < 9; j++) {
        switch(grid[i][j]) {
            case '.':
                colourChange(WHITE);
                break;
            case 'P':
                colourChange(YELLOW);
                break;
            case 'G':
                colourChange(PINK);
                break;
            case 'W':
                colourChange(BLUE);
                break;
        }
        printf("%c  ", grid[i][j]);
    }
    printf("\n");
}
ej83mcc0

ej83mcc02#

这是因为您的第二个for陈述式。因为它没有大括号,所以会假设下一个陈述式Map到它的主体。您的下列printf("%c ", grid[i][j]);假设没有要考虑的j,因此无法辨识。固定的解决方案可能是:

for (int i = 0; i < 9; i++) {
    for (int j = 0; j < 9; j++) {
        switch(grid[i][j]) {
            case '.':
                colourChange(WHITE);
                break;
            case 'P':
                colourChange(YELLOW);
                break;
            case 'G':
                colourChange(PINK);
                break;
            case 'W':
                colourChange(BLUE);
                break;
        }
        printf("%c  ", grid[i][j]);
    }
    printf("\n");
}

相关问题