【发布时间】:2015-07-31 20:24:04
【问题描述】:
我有一个要使用 C 读取的文本文件。它包含以下格式的行:%d %d (%d or %lf)。 3行示例:
1 0 44
2 0 84.13
3 1 15.07
但最后一个数字可以是int 或double,任意。无论数据类型如何,如何从文本文件中读取?
【问题讨论】:
-
检查最后一个数字是否包含点,也许
-
为什么重要? (说真的。任何整数都可以读取为浮点值,并且 - 至少在 x86 硬件上 - 任何
int都可以精确地表示为double。所以没有必要避免丢失信息。不知道为什么它很重要,很难构建一个有用的答案。) -
如果您使用
fgets或类似的方式一次读取一行,则可以使用strtol读取所有值的intpart并检查更新后的*endptr == '.'到确定该值是否实际上是一个浮点数。如果测试为真,则使用p = endptr; floatpart = strtof (p, &endptr); floatvar = (float)(intpart)+floatpart读取(实际上,您可以以相同的方式解析每一行,并且仅在每次intpart读取后*endptr == '.'测试为真时才读取floatpart)。
标签: c parsing int double scanf