gpt4 book ai didi

c - sscanf %s 其中字符串可以为空

转载 作者:行者123 更新时间:2023-11-30 19:25:14 25 4
gpt4 key购买 nike

我正在使用 sscanf 读取具有非常相似数据集的文件行,但可能包含也可能不包含某些数据点。这是数据的格式: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

看起来像这样填写:924821|简陋的石油和精炼编号1| Spring |NM|35|伊达尔戈|023|313030N|1082532W|31.5084388|-108.4255951|||||1382|4534|U Bar Ridge|03/01/1994|

或者像这样,取决于这些数据点是否存在:924855|三叶杨水|流|NM|35|圣胡安|045|364554N|1090003W|36.7649994|-109.0009304|364623N|1090126W|36.7730556|-109.0238889|1654| 5426|贝克拉比托|03/01/1994|

我的问题在于“||||”这是一组分隔符,用于分隔可能存在或不存在的数据点。我正在尝试格式化 sscanf 以将这些数据点值存储到字符串中,无论数据点是否实际存在,但使用格式说明符“[^|]”和“%s”不起作用。我该如何进行这个条件读取?

这是我的 sscanf:

sscanf(curr, "%d|%[^|]|%[^|]|%[^|]|%d|%[^|]|%d|%[^|]|%[^|]|%f|%f|||||%d|%d|%[^|]|%[^|]|%[^|\n]", &id, name, class, state, &state_num, county, &county_num, lat, lon, &lat_dec, &lon_dec, &elev_m, &elev_f, map_name, date_created, date_edited);

我目前只是忽略这些值并进行操作,就好像它们不存在一样。我该如何解释这些?

编辑/澄清:我需要一个像 %s 这样的 sscanf 格式说明符,它允许我不扫描任何内容。例如,我可以执行 sscanf("one|2", "%s|%d", str, num),但如果是 sscanf("|2", "%s|%d", str, num)它抛出一个错误,但我需要它在 str 中存储 NULL。

最佳答案

您可以将数据存储在某个临时缓冲区中。

// non interesting parts omitted with three dots...
char trash[256];
sscanf("...|%255s|%255s|%255s|%255s|", ... &trash, &trash, &trash, &trash, ....);

或者您可以使用 * 字符抑制数据分配:

sscanf(curr, "%d|%[^|]|%[^|]|%[^|]|%d|%[^|]|%d|%[^|]|%[^|]|%f|%f|%*[^|]|%*[^|]|%*[^|]|%*[^|]|%d|%d|%[^|]|%[^|]|%[^|\n]", &id, name, class, state, &state_num, county, &county_num, lat, lon, &lat_dec, &lon_dec, &elev_m, &elev_f, map_name, date_created, date_edited);

有关 scanf 系列函数的更多信息,例如可在 cppreference/fscanf 获取。 .

关于c - sscanf %s 其中字符串可以为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59166114/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com