带结构的C数组

时间:2013-11-09 10:17:28

标签: c

我是结构初学者,几乎不了解它们有用的东西。我有一个任务来创建一个空间为5点的数组。每个点都将由用户输入。

我不明白如何使用带数组的结构。我试过了,但它根本不起作用......

        #include <stdio.h>

int main(void)
{

    struct Input
    {
        int x;
        int y;
    };

    struct Input arr[5];


    for(int i=1; i <= 5; i++)
    {
        printf("Enter coordinates for point #%d (x,y): ", i);
        scanf("%d,%d", &arr[i].x, &arr[i].y);
    }

    printf("\n\nYou entered:\n");

    for(int i=1; i <= 5; i++)
    {
        printf("Point #%d: %d, %d\n", i, arr[i].x, arr[i].y);
    }


    getchar();
    getchar();

    return 0;

}

修改

我正在尝试计算x协调的平均值,但 obs.avgX 不能按计划运行,计算总是为0。

#include <stdio.h>

int main(void)
{

    struct Observations
    {
        int x;
        int y;
        double avgX;
        double avgY;
    };

    struct Observations arr[5];
    struct Observations obs;


    for(int i=0; i < 5; i++)
    {
        printf("Enter coordinates for point #%d (x,y): ", i +1);
        scanf("%d, %d", &arr[i].x, &arr[i].y);
    }

    printf("\n\nYou entered:\n");

    for(int i=0; i < 5; i++)
    {
        printf("Point #%d: %d, %d\n", i, arr[i].x, arr[i].y);
    }


    obs.avgX = arr[0].y + arr[1].y + arr[2].y + arr[3].y + arr[4].y / 5;
    printf("Average of X: %d", obs.avgX);


    getchar();
    getchar();

    return 0;

}

3 个答案:

答案 0 :(得分:3)

如果你需要创建一个包含5个点的数组,首先你需要定义一个点。

例如:

struct Point {
    int x;
    int y;
};

然后你必须定义一个包含5个点的数组:

struct Point array_of_points[5];

你可以像这样使用它:

array_of_points[0].x = 20;
array_of_points[0].y = 10;
// etc...
array_of_points[4].x = 3;
array_of_points[4].y = 8;

答案 1 :(得分:1)

SirDarius对代码做了很好的解释。

你说

  

几乎不了解它们对

有用

事实上,您可以考虑,结构是一种“数据保护程序”,您可以在其中存储不同类型或多种类型的数据。

例如,使用数组,您不能在单元格中存储x和y坐标(多种数据类型)。

此外,如果你想存储学生的学校信息,你可能想要存储,他的唯一ID(整数),他的名字(字符串),他的成绩(整数)和每节课的平均值(浮动)(不同)数据)。使用结构,您可以轻松地存储它们:

struct Student {
int ID;
char * name;
int grade;
float average;
}

希望有助于理解,结构非常有用的原因:)

答案 2 :(得分:0)

计算平均值时,大括号丢失如下,

obs.avgX = (arr[0].y + arr[1].y + arr[2].y + arr[3].y + arr[4].y) / 5;

同样要打印双重类型变量,您应该使用%f作为格式说明符而不是%d