【问题标题】:How to print and scan structures如何打印和扫描结构
【发布时间】:2015-08-14 01:58:21
【问题描述】:

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

#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;

}

谢谢大家!

【问题讨论】:

  • 我认为你需要重新定义你的结构。里面的数组太多了。见ideone.com/YOSjYt
  • 结构数组对于堆栈变量来说是相当多的。建议使用malloc获取内存。

标签: c struct scanf


【解决方案1】:

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

这里有个bug:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-09
    • 1970-01-01
    • 1970-01-01
    • 2016-01-10
    • 2013-07-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多