这是 codechef 问题的代码。
#include<stdio.h>
inline int chkIsDiv(int n1, char* ptr)
{
int i=0, b=0;
while(ptr[i] != '\0')
{
b=b*10+(ptr[i]-48);
b%=n1;
i++;
}
if(b==0)
return 1;
return 0;
}
int main()
{
int t, a, b=0, i;
char c[252];
scanf("%d",&t);
while(t>0)
{
scanf("%d",&a);
i=0;
getchar();
while((c[i++]=getchar()) !='\n');
c[i-1]='\0';
if(a!=0 && chkIsDiv(a,c)) printf("%d",a);
else if(a==0) {
i=0;
while(c[i] !='\0') printf("%d",c[i++]-48);
}
else
{
for(i=a-1; i>=1; i--)
{
if(a%i==0) {
if(chkIsDiv(i,c)) {
printf("%d",i);
break;
}
}
}
}
printf("\n");
t--;
}
//getch();
return 0;
}
问题是当我在ideone上运行上面的代码时,它编译成功,但是当我输入输入测试用例时,它给出了分段错误(SIGSEGV)运行时错误。我在ideone上的提交链接:http: //ideone.com/qGclvK
同样,当我提交我的问题时,在 codechef 上它给出了相同的错误。(我猜是因为两者都使用来自 SPOJ 的相同编译器)。
但是当我在我的机器上运行相同的代码时,它适用于问题中指定的每个输入条件以及极端情况。该代码在 Windows 和 linux 中运行良好。而且我相信我使用的算法是正确的。
我在 windows 中使用 Dev-C++ 默认编译器,在 linux 中使用 gcc。
我知道错误是由于一些无效的内存引用而发生的,但是我无法找到问题出在哪里,哪个语句导致了问题,因为它在我的系统上运行良好。
谁能帮帮我,我是初学者?
[已解决] #thank_to_MayankJain。
解决了。问题是我假设每行末尾都有一个 '\n',但在这种情况下,最后一行将不包含任何 '\n' 所以我现在测试了 EOF 标记,并且工作正常。
这是修改后的代码http://ideone.com/qGclvK