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("%d\n", min);
}
return 0;
}
我还想指出,程序的相互编译显示“分段错误(核心转储)”或只是“分段错误”,这很奇怪。有时它不会显示任何错误,但无论如何仍然不接受输入。
编辑:现在当我为 a[i] 和 b[i] 输入第三个输入时,程序冻结。
解决方案
你没有改变a[i]
,也没有b[i]
在while
循环内。假设您想在检查完数组的所有位置后退出,您应该引入此条件(将其更改为 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("%d\n", min);
}
return 0;
}
推荐阅读
- python - 无法将值写入特定单元格
- apache-kafka - 主题没有配置主题级别的兼容性
- postgresql - Sequelize - 只有在包含的模型至少有一条记录时才返回行
- facebook - 如何使用测试用户将 Facebook 页面链接到 Instagram 页面?
- python - 如何使用仅提供两个点的宽度来创建线条/多边形?
- ruby - 有没有办法专门循环多次
- r - R Shiny selectizeInput - 每次拖动后拖放而不打开下拉菜单
- sql - 删除导致死锁的旧行
- vb.net - RadComboBox 上的自定义验证不起作用
- google-cloud-platform - 在 GCP 控制台中创建磁盘显示加载失败