2014-12-07 76 views
0

所以我试过寻找类似于我的情况的东西,但我无法找到任何有用的或者足够简单的东西来理解。将文件扫描到嵌套结构

我的问题,我相信并不难,但我不知道如何做到以下几点:

我有一个结构内的结构,需要在多个文件扫描到主结构。 这就是我所拥有的和我卡在消息中的地方。我觉得好像我可能还需要一个结构,但我又不敢肯定

这些都是我的结构

typedef struct { 
int year; 
int month; 
int day; 
char time[9]; 
} datetime_t 

typedef struct 
{ 
datetime_t datetime; 
double latitude; 
double longitude; 
double magnitude; 
double depth; 
char location[LOCATION] 
} data_t 

这里是我的扫描文件

void scan_data(data_t Alaska[], data_t Central[],data_t Inner[], 
data_t East[],data_t West[],data_t Canada[MAX_INFO]) 
{ 
int i=0; 
FILE *FAlaska; 
FILE *FCentral; 
FILE *FInner; 
FILE *FEast; 
FILE *FWest; 
FILE *FCanada; 

FAlaska = fopen("Alaska.txt", "r"); 
FCentral = fopen("Central.txt", "r"); 
FInner = fopen("InnerMountain.txt", "r"); 
FEast = fopen("NorthEast.txt", "r"); 
FWest = fopen("NorthWest.txt", "r"); 
FCanada = fopen("NorthernCanada.txt", "r"); 

while (i < MAX_DATA && 
    fscanf(FAlaska, "%s", data[i].datetime) !=EOF) /*here is my issue*/ 
{              
    fscanf(FAlaska, "d", data.latitude); 
} 
fclose(FAlaska); 
return; 
    } 

我不知道如何或如果我可以将数据扫描到结构中的结构中? 你做数据[I] .datetime.year? 或作为单独的数组/结构扫描到日期时间,然后将其分配给更大的结构?

任何帮助将非常赞赏如何做到这一点。谢谢。

+0

你问['fscanf'](http://en.cppreference.com/ w/c/io/fscanf)来读取一个字符串,并将其写入一个结构体,你不能那样做。首先,当'scanf'(和family)读取一个字符串时,它会读取*空格分隔的字符串,因此如果要读取的字符串包含空格,则不会读取所有字符串。其次,如果它是以这种方式在文件中,则需要分别读取嵌套结构的每个字段。 – 2014-12-07 01:13:18

+0

也许http://stackoverflow.com/questions/2722606/how-to-parse-a-string-into-a-datetime-struct-in-c或http://stackoverflow.com/questions/12071342/reading-一个与sscanf的日期将有一定的帮助。重复? – 2014-12-07 04:21:54

+0

@JoachimPileborg我明白你的观点,我对此有所了解。 – puzzlekid 2014-12-07 07:02:17

回答

0

我不知道如何或者如果我可以将数据扫描到 结构内的结构?你做数据[I] .datetime.year?

是的,我们做。例如,如果您的日期/时间格式为 “YYYY-MM-DD HH:MM:SS”,你可以使用

data = Alaska; 
… 
    fscanf(FAlaska, "%d-%d-%d %8s", &data[i].datetime.year, 
            &data[i].datetime.month, 
            &data[i].datetime.day, data[i].datetime.time) …