cscanf存储字符串

问题描述 投票:0回答:1

我正在使用fscanf读取每行具有这种格式的文件:

//FEATURE_ID|FEATURE_NAME|FEATURE_CLASS|STATE_ALPHA|STATE_NUMERIC|COUNTY_NAME|COUNTY_NUMERIC|PRIMARY_LAT_DMS|PRIM_LONG_DMS|PRIM_LAT_DEC|PRIM_LONG_DEC|SOURCE_LAT_DMS|SOURCE_LONG_DMS|SOURCE_LAT_DEC|SOURCE_LONG_DEC|ELEV_IN_M|ELEV_IN_FT|MAP_NAME|DATE_CREATED|DATE_EDITED

这里是文件的第一行,例如:

//913064|Oso Spring|Spring|NM|35|Rio Arriba|039|365418N|1061159W|36.904945|-106.1998199|||||2863|9393|Bighorn Peak|12/01/1991|04/19/2011

我的代码是这样:

int id, state_num, county_num, elev_m, elev_f;
float lat_dec, lon_dec;
char* name[25];
char* class[25];
char* state[25];
char* county[25];
char* lat[25];
char* lon[25];
char* s_lat_dms[25];
char* s_lon_dms[25];
char* s_lat_dec[25];
char* s_lon_dec[25];
char* map_name[25];
char* date_created[25];
char* date_edited[25];

fscanf(data, "%d|%[^|]s|%s|%s|%d|%s|%d|%s|%s|%f|%f|%s|%s|%s|%s|%d|%d|%s|%s|%s", &id, name,
class, state, &state_num, county, &county_num, lat, lon, &lat_dec,
           &lon_dec, s_lat_dms, s_lon_dms, s_lat_dec, s_lon_dec, &elev_m, &elev_f, map_name,
date_created, date_edited);
    printf("id:%d \nname:%s \nclass:%s \nstate:%s \nstate_num:%d \n", id, name, class, state,
state_num);

但是当我在命令行上运行它时,它会打印出来:

id:913064

名称:Oso Spring

class:�&6 +�

状态:

state_num:1178

为什么它不能在char *类数组中正确存储数据?有一些特定的代码位需要保留,例如第一个字符串值必须能够保留空白,因此我添加了“ [^ |]”,但是一旦这样做,它就开始在类。我已经对fscanf进行了广泛的研究,但是找不到如何正确地做我想做的事情。有人可以帮助我正确地组织一下,并填补我似乎无法填补的知识空缺吗?

c string scanf
1个回答
0
投票
© www.soinside.com 2019 - 2024. All rights reserved.