The code runs perfectly when I arbitrarily pass arguments to the area function. But gives me a segmentation fault when I try to run the loops. Given n<100
当我随意地将参数传递给区域函数时,代码运行得很好。但是当我尝试运行循环时,会给我一个分段错误。鉴于n < 100
Here's my code.
这是我的代码。
#include<stdio.h>
#include<math.h>
double area(int x,int y,int x1,int y1,int x2,int y2)
{ //Heron's formula
double a,b,c,s;
double abc;
a=sqrt(((x-x1)*(x-x1))+((y-y1)*(y-y1)));
b=sqrt(((x-x2)*(x-x2))+((y-y2)*(y-y2)));
c=sqrt(((x2-x1)*(x2-x1))+((y2-y1)*(y2-y1)));
s=(a+b+c)/2;
abc=sqrt(s*(s-a)*(s-b)*(s-c));
return(abc);
}
int main(void)
{
int n,i,j,k;
double max=0,z=0;
scanf("%d",&n);
int x[100]={},y[100]={};
for(i=0;i<n;i++)
{
scanf("%d %d",&x[i],&y[i]);
}
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{
for(k=j+1;k<n;j++)
{
z=area(x[i],y[i],x[j],y[j],x[k],y[k]);
printf("%lf\n",z);
if(z>max)
{
max=z;
}
}
}
}
//printf("\n%lfoi\n",area(0,0,1,0,1,2));
printf("%lf",max*2);
}
4 个解决方案
#1
8
The inner loop is incrementing j
, it should probably increment k
:
内部循环增加j,应该增加k:
for(k=j+1;k<n;j++)
^
oops!
#2
3
there is an error index in inner loop: should be
内部循环中有一个错误索引:应该是。
for(k=j+1;k<n;k++)
instead of
而不是
for(k=j+1;k<n;j++)
#3
0
for(k=j+1;k<n;j++)
I think you meant to increment k in this loop, not j.
我认为你应该在这个循环中增加k,而不是j。
#4
0
You have to increase "k" not "j"
你必须增加"k"而不是"j"
for(k=j+1;k<n;k++)
{ }
#1
8
The inner loop is incrementing j
, it should probably increment k
:
内部循环增加j,应该增加k:
for(k=j+1;k<n;j++)
^
oops!
#2
3
there is an error index in inner loop: should be
内部循环中有一个错误索引:应该是。
for(k=j+1;k<n;k++)
instead of
而不是
for(k=j+1;k<n;j++)
#3
0
for(k=j+1;k<n;j++)
I think you meant to increment k in this loop, not j.
我认为你应该在这个循环中增加k,而不是j。
#4
0
You have to increase "k" not "j"
你必须增加"k"而不是"j"
for(k=j+1;k<n;k++)
{ }