【发布时间】:2020-10-03 18:10:11
【问题描述】:
程序可以正确编译,但是当我尝试输入任何数字时,它会以错误代码 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("%d\n", min);
}
return 0;
}
我还想指出,程序的相互编译显示“分段错误(核心转储)”或只是“分段错误”,这很奇怪。有时它没有显示任何错误,但仍然不接受输入。
编辑:现在当我为 a[i] 和 b[i] 输入第三个输入时,程序会冻结。
【问题讨论】:
-
你永远不会在 while 循环中改变 a[i] 或 b[i],所以 t 应该永远运行或者根本不运行。
-
t是什么值? -
@WeatherVane 由scanf设置。
-
无法复制。确保您正在运行您认为正在运行的程序。我建议将程序和输入数据复制到在线编译器站点之一并在那里尝试。
-
什么是值?使用
scanf()输入。scanf()的返回值是多少?应该是1。
标签: c segmentation-fault