首页 > 解决方案 > 如何将多个值添加到结构中

问题描述

我需要创建一个可以向我的结构添加至少 10 个不同 x,y 值的函数

typedef struct Point
{
    float x, y;

}Point;

Point  createPoint(double x, double y){

    Point p[10];
    for (int i = 0; i < 10; ++i){
        if (isnan(p[i].x) == 0){
            p[i].x = x;
            p[i].y = y;
        }
    }

  for (int z = 0; z < 2; ++z){
        printf("%f\n", p[0].y);
  }

}

int main(){  
    createPoint(5, 6);
    createPoint(7, 9);
    return 0;
}

打印时,我得到相同数字 p[0] 的 2 个值,但我需要能够以不同的数字达到不同的值

标签: cpointersstructscopenan

解决方案


该数组p是函数的本地数组createPoint,并且在函数退出时超出范围。这意味着您在一个函数调用中所做的更改在下一个函数调用中不可见。

此外,因为您不初始化 的值p,所以不能依赖它们包含NaN. 事实上,试图读取一个未初始化的变量会调用未定义的行为

您的p数组应该是main函数的全局或本地数组,以便其生命周期扩展到多次调用createPoint. 您还应该保留一个单独的计数器来记录当前存储了多少元素,p以便您可以写入下一个可用插槽。

void createPoint(Point *p, double x, double y, int *count)
{
    p[*count].x = x;
    p[*count].y = y;
    (*count)++;
}

void printPoints(Point *p, int count)
{
  for (int z = 0; z < count; ++z){
        printf("%f\n", p[z].y);
  } 
}

int main(){  
    Point p[10];
    int count = 0;

    createPoint(p, 5, 6, &count);
    createPoint(p, 7, 9, &count);
    printPoints(p, count);
    return 0;
}

推荐阅读