in 478. don't find any critical I/O that doesn't handle my program. could any one help me to find out the bug?
Code: Select all
#include<stdio.h>
#include<math.h>
struct rectange{ float lx,ly,rx,ry; }rec[10];
struct circle{ float x,y,r; }cir[10];
struct triange{ float x1,y1,x2,y2,x3,y3; }t[10];
float area_t(float x1,float y1,float x2,float y2,float x3,float y3)
{
float area;
area=0.5*(x1*(y2-y3)+x2*(y3-y1)+x3*(y1-y2));
if(area<0.0) area=-area;
return area;
}
int main()
{
char ch[5];
int i ,j,n,p=1,flag;
float x,y,x1,y1,x2,y2,temp,a,area,area1,area2,area3,total;
n=0;
while(2)
{
scanf("%s",&ch);
if(ch[0]=='*') break;
else if(ch[0]=='r')
{
scanf("%f%f%f%f",&x1,&y1,&x2,&y2);
if(x1>x2){temp=x1,x1=x2,x2=temp;}
if(y1>y2){temp=y1,y1=y2,y2=temp;}
rec[n].lx=x1, rec[n].ly=y1, rec[n].rx=x2, rec[n].ry=y2;
n++;
}
else if(ch[0]=='c'){ scanf("%f%f%f",&cir[n].x,&cir[n].y,&cir[n].r); n++; }
else if(ch[0]=='t')
{
scanf("%f%f%f%f%f%f",&t[n].x1,&t[n].y1,&t[n].x2,&t[n].y2,&t[n].x3,&t[n].y3);
n++;
}
}
while(scanf("%f%f",&x,&y)==2)
{
flag=0;
if((x>=9999.90)&&(y>=9999.90)) break;
for(i=0;i<n;i++)
{
if((x>=rec[i].lx&&x<=rec[i].rx)&&(y>=rec[i].ly && y<=rec[i].ry))
{ printf("Point %d is contained in figure %d\n",p,i+1); flag=1; }
a=sqrt((x-cir[i].x)*(x-cir[i].x)+(y-cir[i].y)*(y-cir[i].y));
if(a<=cir[i].r)
{
printf("Point %d is contained in figure %d\n",p,i+1);
flag=1;
}
if((int)t[i].x1==(int)t[i].x2==(int)t[i].x3==(int)t[i].y1==(int)t[i].y2==(int)t[i].y3)
continue;
area=area_t(t[i].x1,t[i].y1,t[i].x2,t[i].y2,t[i].x3,t[i].y3);
area1=area_t(x,y,t[i].x2,t[i].y2,t[i].x3,t[i].y3);
area2=area_t(t[i].x1,t[i].y1,x,y,t[i].x3,t[i].y3);
area3=area_t(t[i].x1,t[i].y1,t[i].x2,t[i].y2,x,y);
total=area1+area2+area3;
if(area==total)
{
printf("Point %d is contained in figure %d\n",p,i+1);
flag=1;
}
}
if(flag==0) printf("Point %d is not contained in any figure\n",p);
p++;
}
return 0;
}