c-已退出,代码为139(分段故障)



程序编译正常,但当我尝试输入任何数字时,它会终止,并返回错误代码139。问题可能出现在第二个for循环中,因为我注释掉了整个子句,一切都很好。

#include <stdio.h>
#include <stdlib.h>
int main()
{
int t;
scanf("%d", &t);
int a[t], b[t];
for(int i=0; i<t; i++)
{
scanf("%d%d", &a[i], &b[i]);
}
for(int i=0; i<t; i++)
{
int min = 0;
while(a[i]!=b[i])
{
if(a[i]<b[i])
{
for(int j=a[i]; j<b[i]; j+=10)
{
if(b[i]-j>10)
{
min += 1;
a[i] += j;
} else
{
min += 1;
a[i] = b[i];
}
}
} else
{
for(int j=b[i]; j>a[i]; j-=10)
{
if(j-a[i]>10)
{
min += 1;
a[i] -= j;
} else
{
min += 1;
a[i] = b[i];
}
}
}
}
printf("%dn", min);
}
return 0;
}

我还想指出的是,每一个其他汇编的程序显示";分段故障(堆芯转储(";或者仅仅是";"分段故障";,这很奇怪。有时它不会显示任何错误,但仍然不接受输入。

编辑:现在,当我为a[I]和b[I]输入第三个输入时,程序会冻结。

您不会在while循环内更改a[i]b[i]。假设你想在它检查完数组的所有位置后退出,你应该引入这个条件(把它改成for,更容易(:

#include <stdio.h>
#include <stdlib.h>
int main()
{
int t;
scanf("%d", &t);
int a[t], b[t];
for(int i=0; i<t; i++)
{
scanf("%d%d", &a[i], &b[i]);
}
for(int i=0; i<t; i++)
{
int min = 0;
for(;a[i]!=b[i] && i<t;i++) //Here
{
if(a[i]<b[i])
{
for(int j=a[i]; j<b[i]; j+=10)
{
if(b[i]-j>10)
{
min += 1;
}
}
} else
{
for(int j=b[i]; j>a[i]; j-=10)
{
if(j-a[i]>10)
{
min += 1;
}
}
}
}
printf("%dn", min);
}
return 0;
}

相关内容

  • 没有找到相关文章

最新更新