如何打印和扫描结构

时间:2015-05-31 15:56:38

标签: c struct scanf

我正在学习如何正确地编写结构。但我不习惯修理结构。我想要的只是代码错误(对于结构)意味着什么以及如何解决它。它与数组类似吗?我知道代码没有输入,但我需要的帮助只是用于修复由结构引起的错误。

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<limits.h>
#define MAX_POINTS 100
#define MAX_POLYGONS 100

typedef struct{
    int polyid[MAX_POINTS];
    int npoints[MAX_POINTS];
    double x[MAX_POINTS];
    //Stage1
    double y[MAX_POINTS];
    double perimeter;
    double eccentricity;
    double area;
} Polygon;

int main(int argc, char *argv[]) {
    Polygon Total_poly[MAX_POLYGONS];
    int count=0;
    int i,j,k,l;
    printf("Stage 1");
    printf("=====");
    while(scanf("%d %d",&Total_poly[count].polyid,&Total_poly[count].npoints)==2){
        printf("First Polygon %d",Total_poly[count].polyid);
         printf("x_val      y_val");
        for(i=0;i<Total_poly[count].npoints;i++){
             while(scanf("%lf %lf",&Total_poly[count].x[i],
                        &Total_poly[count].y[i])==2){
             printf("%d     %d",Total_poly[count].x[i],
                        Total_poly[count].y[i]);
                        }
        }
    }

    //Stage2
    //Stage3
return 0;

}

谢谢你们!

1 个答案:

答案 0 :(得分:1)

Polygon Total_poly[MAX_POLYGONS];使用超过240 KB的堆栈空间。它可能会导致某些系统出现问题。您应该将此数组设为全局或使用malloc()进行分配。

这里有一个错误:

printf("%d     %d",Total_poly[count].x[i],
                    Total_poly[count].y[i]);

您使用%d,但您将double值作为参数传递。您应该使用%e%f%g

您应该配置编译器以生成有用的警告消息,以防止出现此类错误。 gcc -Wall -W -Werror是一个好的开始。