#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坐标时,它给了我零。请告诉我出了什么问题,以及如何解决它,如果你特别慷慨,如何改进我的代码,让它看起来更优雅。
答案 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的指针,其内存需要在其他地方分配。当需要动态分配包含的结构时,将指针作为结构字段更常见。