【发布时间】:2018-04-14 21:48:10
【问题描述】:
按照this question 中的扫描集格式,我尝试了一种稍微不同的格式来读取多个数字而不是一个数字。这是我的数据:
722280,"BIRMINGHAM MUNICIPAL AP",AL,-6.0,33.567,-86.750,189
这是我的代码:
char buf[400];
char station[11], city[101], state[11];
int tz, lat, lon, alt;
fgets(buf, sizeof buf, file) // yes, I test this
sscanf( buf, "%10[^,],%100[^,],%10[^,],%d,%d,%d,%d", station, city, state, &tz, &lat, &lon, &alt);
当我运行它时,车站、城市、州和 tz 都已正确设置。但是,lat、lon 和 alt 不是 - 例如 lat 是 1,lon 是 0。
我在字符串上尝试了多种变体,包括 %d 后的 [^,] 和删除逗号,但都没有运气。
是的,我知道我可以使用 strtok 或众多变体中的一个来做到这一点,但我想尝试 sscanf,因为它匹配一组类似的代码,我想让它们保持相似,如果可能。
我怀疑这是可能的,我正在考虑格式?
【问题讨论】:
-
它们是浮点数,而不是
int。您在sscanf中使用%d格式。 -
天啊。这就是 C&P 所得到的。
-
总是检查
scanffamily的返回值:成功转换的项目数。 -
我用真实的代码做测试,这是我的sim。嗯,所以我这样做了: "%10[^,],%100[^,],%10[^,],%d,%f,%f,%d" 我得到了相同的行为。跨度>
-
您在文本输入示例中有 3 个浮点值,但在注释的“真实代码”中只有 2 个
%f。他们是int还是float还是double?变量都是int。