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 并避免未定义的行为和无限循环。
我在关于问题 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 并避免未定义的行为和无限循环。