做POJ1056时出现Runtime Error的情况,最终发现是为处理输入终止的情况,一直以为是数组越界。
判断输入是否终止使用EOF
for(i=0;;i++){
if(scanf("%s",a[i])!=EOF){
if(strcmp(a[i],"9")==0)
break;
}else{
return 0;
}
}
完整代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int i,j,len,lenc,lenb,l,tag,n;
char a[12][12],b[12],c[12];
n = 1;
while(1){
memset(a,0,sizeof(char)*144);
for(i=0;;i++){
if(scanf("%s",a[i])!=EOF){
if(strcmp(a[i],"9")==0)
break;
}else{
return 0;
}
}
len = i;
tag = 0;
for(i=0;i<len;i++){
for(j=i+1;j<len;j++){
if(strcmp(a[i],a[j])==0)
continue;
memset(b,0,sizeof(char)*12);
memset(c,0,sizeof(char)*12);
if(strlen(a[i])>strlen(a[j])){
strcpy(b,a[i]);
strcpy(c,a[j]);
}else{
strcpy(c,a[i]);
strcpy(b,a[j]);
}
lenc = strlen(c);
if(strncasecmp(b,c,lenc)==0){
tag = 1;
break;
}
}
if(tag==1)
break;
}
if(tag==1)
printf("Set %d is not immediately decodable\n",n++);
else
printf("Set %d is immediately decodable\n",n++);
}
return 0;
}

在解决POJ1056问题时遇到Runtime Error,原本误以为是数组越界导致,实际是未正确处理输入结束(EOF)。通过修正输入判断,问题得到解决。

3545

被折叠的 条评论
为什么被折叠?



