c - expected 'struct polygons *' but argument is of -


i don't know why error coming mentioned in title. data numbers , function reads without problem when tested without pointers.

note: don't need use 'malloc' or other ones. i'm trying figure what's going structure.

#include<stdio.h> #include<stdlib.h> #include<math.h> #include<limits.h> #define max_points 100 #define max_polygons 100  typedef struct{     int polyid;     int npoints;     double x[max_points];     //stage1     double y[max_points];     double perimeter;     double eccentricity;     double area; } polygon;  typedef struct {     polygon npolygon[max_polygons]; }polygons; //function prototypes void process_file(polygons *total_poly); int largestvalue_index(double a[],int m); int largest_poly_id(double a[],int m, int b[]); double area(double x[max_points],double y[max_points],int n); double perimeter(double x[max_points],double y[max_points],int n); double eccentricity(double area,double perimeter);  int main(int argc, char *argv[]) {     int i,j,k,l;      polygons total_poly;     process_file(total_poly);     printf("stage 1\n");     printf("=====\n");       printf("first polygon %d\n",total_poly->npolygon[0]->polyid);     printf("x_val       y_val\n");     for(i=0;i<total_poly->npolygon[0].npoints;i++){     printf("%8.2f %8.2f\n",total_poly->npolygon[0]->x[i],         total_poly->npolygon[0]->y[i]);     }     printf("area=%.2f\n",area(total_poly->npolygon[0].x,         total_poly->npolygon[0]->y,total_poly->npolygon[0]->npoints));     printf("perimeter=%.2f\n",perimeter(total_poly->npolygon[0]->x,         total_poly->npolygon[0]->y,total_poly->npolygon[0]->npoints));     printf("eccentricity=%.2f\n",total_poly->npolygon[0]->eccentricity);       //stage2     printf("stage 2");     printf("=======\n");     for(l=1;l<=5;l++){         printf("+-------");     }     printf("+\n");     printf("|    id |  nval | perim |  area | eccen |\n");     for(l=1;l<=5;l++){         printf("+-------");     }     printf("+\n");     for(k=0;k<count;k++){     printf("| %5d | %5d |%6.2f |%6.2f |%6.2f |\n",         total_poly->npolygon[k]->polyid,total_poly->npolygon[k]->npoints,         total_poly->npolygon[k]->perimeter,total_poly->npolygon[k]->area,         total_poly->npolygon[k]->eccentricity);     }     for(l=1;l<=5;l++){         printf("+-------");     }     //stage3     return 0; } void process_file(polygons *total_poly){     int count=0;     int i;     while(scanf("%d %d",&total_poly.npolygon[count].npoints,         &total_poly.npolygon[count].polyid)=2){     for(i=0;i<total_poly.npolygon[count].npoints;i++){         if( scanf("%lf %lf",&total_poly.npolygon[count].x[i],             &total_poly.npolygon[count].y[i])=!2)         {             printf("error");             exit(exit_failure);         }else{             scanf("%lf %lf",&total_poly.npolygon[count].x[i],             &total_poly.npolygon[count].y[i]);         }        }      count++;         } }  double area(double x[max_points],double y[max_points],int n){     int i,j;     double area=0;     j=n-1;     for(i=0;i<n;i++){         area+=(x[i]-x[j])*(y[i]+y[j]);         j=i;     } return 0.5*fabs(area); }  double perimeter(double x[max_points],double y[max_points],int n){     int i,j;     double length=0;     j=n-1;     for(i=0;i<n;i++){         length+=fabs(sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j])));         j=i;     }     return length; }  double eccentricity(double area,double perimeter){     return perimeter*perimeter/area/(4*m_pi); }  int largest_poly_id(double a[],int m, int b[]){     int i,j;     int poly_index=0,largest = a[0];     for(i=1;i<m;i++){         if(a[i]>largest){             largest=a[i];             poly_index=i;         }        }     j=b[poly_index];     return j; }  int largestvalue_index(double a[],int m){     int i;     int index=0,largest=a[0];     for(i=1;i<m;i++){         if (a[i]>largest){             largest=a[i];             index=i;         }     }     return index; } 

you passing struct process_file function. is, however, expecting pointer struct.

change line:

process_file(total_poly); 

to this:

process_file(&total_poly); 

additionally, you'll need change -> operators in printf statements in main function . operators.


Comments