UVa 判断的运行时错误

Runtime error on UVa judge

我在关于问题 10189 的 UVa judge 上收到一个运行时错误。我已经非常努力地尝试了,但我一直无法找到错误的原因。 在这个问题中,我们应该找到扫雷器的提示矩阵 field.Here 是我的代码:

#include <stdio.h>

int main() { 
    char ch;
    int row, col, i, j, ans[101][101];
    int tot = 0;

    scanf("%d %d", &row, &col);

    while (row != 0) {
        tot++;

        for (i = 1; i <= row; i++) {
            scanf("\n");
            for (j = 1; j <= col; j++) {
                ch = getchar();
                if (ch == '*') {
                    ans[i][j] = 1;
                } else {
                    ans[i][j] = 0;
                }
            }
        }        
        for (i = 0; i <= row + 1; i++) {
            ans[i][0] = 0;
            ans[i][col+1] = 0;
        }
        for (j = 0; j <= col + 1; j++) {
            ans[0][j] = 0;
            ans[row+1][j] = 0;
        }

        printf("Field #%d\n", tot);
        for (i = 1; i <= row; i++) {
            for (j = 1; j <= col; j++) {
                if (ans[i][j] == 1)
                    printf("*");
                else {
                    printf("%d", ans[i-1][j-1] + ans[i-1][j] + ans[i-1][j+1] +
                                 ans[i][j-1]   +               ans[i][j+1] +
                                 ans[i+1][j-1] + ans[i+1][j] + ans[i+1][j+1]);
                }
            }
            printf("\n");
        }
        printf("\n");

        scanf("\n%d %d", &row, &col);
    }
    return 0;
}

如果雷区可能是100x100,你应该把数组大一列,长一排:ans[102][102].

请注意,您可以通过在阅读雷区之前将此数组初始化为 0 来简化代码:

memset(ans, 0, sizeof ans);

您绝对还应该检查 scanf 的 return 值以检测无效输入 and/or 过早的 EOF 并避免未定义的行为和无限循环。