如何访问嵌套结构中的项目

时间:2014-10-17 19:43:55

标签: c struct nested

#include <stdio.h>
#include <math.h>

#define MAXVALS 100

typedef struct {
    double x,y;
} location_t;

typedef struct {
    location_t loc;
    double sos;
} loc_sos_t;

int
main(int argc,char *argv[]){

int line_count = 0, i=0;
double temp_x, temp_y, temp_watt;


location_t loc_str[MAXVALS];
loc_sos_t sos_str[MAXVALS];

while (scanf("%lf %lf %lf", &temp_x, &temp_y, &temp_watt) == 3){
    loc_str[i].x   = temp_x;
    loc_str[i].y   = temp_y;
    sos_str[i].sos = temp_watt;

    i+=1;
    line_count+=1;}
for (i=0; i<5; i++){
    printf("x= %lf, y= %lf\n", sos_str[i].loc.x, sos_str[i].loc.y);

}
printf("line count = %d", line_count);
return 0;
}


input file
30.0 70.0 0.0045
53.0 63.0 0.0006
36.5 27.0 0.0005
70.0 25.0 0.0015
20.0 50.0 0.0008
columns are X coordinates, Y coordiantes, watts

我试图从输入文本文件中读取值并将它们放在2个不同的结构中。第一个结构需要有X和Y坐标,而第二个需要有(X,Y)和瓦特。最后一个for循环是检查结构中是否存在值。当我尝试从第二个结构中访问X和Y坐标时,它给了我零。请告诉我出了什么问题,以及如何解决它,如果你特别慷慨,如何改进我的代码,让它看起来更优雅。

2 个答案:

答案 0 :(得分:1)

location_t loc_str[MAXVALS];
...
loc_str[i].x   = temp_x;
loc_str[i].y   = temp_y;

您正在设置与sos_str数组无关的位置。摆脱loc_str并做

sos_str[i].loc.x = temp_x;
sos_str[i].loc.y = temp_y;

答案 1 :(得分:1)

你可以做任何一次

location_t loc_str[MAXVALS];
...
sos_str[i].loc.x = temp_x;
sos_str[i].loc.y = temp_y;

typedef struct {
    location_t *loc;
    double sos;
} loc_sos_t;
....
location_t loc_str[MAXVALS];
loc_sos_t sos_str[MAXVALS];
...
loc_str[i].x   = temp_x;
loc_str[i].y   = temp_y;
sos_str[i].sos = temp_watt;
sos_str[i].loc = &loc_str[i];

第二个选项增加了不必要的复杂性,但它有助于解释代码中出现的问题。 在创建数组sos_str时,实际上也创建了空间来保存MAXVALS的location_t数。要访问该空间,您需要sos_str [i] .loc,就像访问结构中任何字段的方式一样。 在第二个选项中,您需要创建两个数组,因为loc_sos_t不再包含location_t。相反,它包含指向location_t的指针,其内存需要在其他地方分配。当需要动态分配包含的结构时,将指针作为结构字段更常见。