【发布时间】:2020-04-06 23:17:33
【问题描述】:
我有一个程序可以计算在 N 秒内发生的病毒传播。我的程序从 data.in 文件中获取输入,该文件包含以下内容:
3 // How many testcases
3 1 // 3 is size of maps of the body that will be infected by the virus, and 1 is how many seconds it will spread.
###
###
V##
3 2
###
###
V##
3 3
###
###
V##
对于在身体周围传播的每一秒病毒# 地图。但我的问题是,每1个测试用例,第一个测试用例和第二个测试用例之间必须有一个分隔符,其中分隔符输入(\n)。我用 fget () 分隔每个测试用例;但是,在线法官给了我一个运行错误(10),这意味着10个测试用例中只有1个测试用例成功,其余的都给出了运行错误。
这是我尝试制作的代码:
#include <stdio.h>
int main()
{
int cases,size,time;
char body[500][500];
FILE *fptr = fopen("data.in","r");
fscanf(fptr,"%d\n",&cases);
for(int i = 0; i < cases; i++){
fscanf(fptr,"%d %d\n",&size, &time);
for(int j = 0; j < size; j++){
fscanf(fptr,"%[^\n]\n", body[j]);
}
fscanf(fptr,"\n");
int newTime = time - 1;
for(int k = 0; k < size; k++){
for(int l = 0; l < size; l++){
if(body[k][l] == 'V'){
for(int m = k - newTime; m <= k + newTime; m++){
for(int n = l - newTime; n <= l + newTime; n++){
body[m][n] = '1'; // Flagging
}
}
}
}
}
printf("#%d:\n",i + 1);
for(int o = 0; o < size; o++){
for(int p = 0; p < size; p++){
if(body[o][p] == '1') printf("V");
else printf("#");
}
printf("\n");
}
printf("\n");
}
fclose(fptr);
return 0;
}
我的输出:
#1:
###
###
V##
#2:
###
VV#
VV#
#3:
VVV
VVV
VVV
但是,我的程序已经给出了正确的输出,但是当我提交到在线判断时,它给了我运行时错误。我该如何解决这个问题?
【问题讨论】:
-
什么是在线法官?
-
你不能在分配的数组之外读写。越界写入将发生在
body[m][n] = '1';。 -
@machine_1 它类似于 vjudge.net,他使用一个检查每个案例的系统来检查我们的编码
-
仅供参考,
%d忽略前导空格,包括换行符。fscanf(fptr,"\n");完全没有意义。在扫描下一个测试的即将到来的维度时,无论如何你都会点击%d。 -
@MikeCAT 那么,我应该在每个测试用例中将数组设置为零吗?无论如何,约束只到body [100] [100],但我给了很多额外的空间,所以它可以工作,但它没有:/(无论如何,我已经通过移动char body [100] [100] = {{}}; 进入测试用例的循环,但它仍然给出运行时错误:\