首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ansi-c fscanf问题

ansi-c fscanf问题
EN

Stack Overflow用户
提问于 2010-03-14 15:20:27
回答 3查看 566关注 0票数 1

您好,我按如下方式阅读了文件

代码语言:javascript
复制
       fscanf(fp,"%f %f %f\n",&*(p1+i), &*(p2+i), &*(p3+i));

我的文件行由三个浮点数组成...

我遇到的问题是,在文件中,假设我有一些浮点数,假设点后最多有两位数。但是当我要求c使用不同的格式打印这些值时,例如%lf,%.2lf,%.4lf...它开始玩弄数字...我唯一关心的是,如果我假设文件中有1343.23,那么c会完全按照计算中的方式使用这个值,或者它将播放圆点后面的数字。如果它可以播放,那么如何才能让它完全使用浮点数呢?例如,在最后一种情况下,即使我要求它使用%.10lf打印该值,我也希望它只打印1343.2300000000。?非常感谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-03-14 15:37:15

“问题”在于,根据定义,浮点数是近似值。您应该阅读以了解更多信息。

此外,您可以将&*(x)简化为x,因此您应该在fscanf调用中编写p1+ip2+ip3+i

票数 2
EN

Stack Overflow用户

发布于 2010-03-14 15:33:44

当您读入字符串1343.23时,将其视为十进制数,将其转换为计算机的内部二进制表示形式。使用格式说明符的输出将从二进制转换为十进制。在输出时,如果在小数点后要求不同的位数,可能会得到不完全相同的值。特定的浮点十进制数可能无法在有限长度的二进制浮点数中精确表示,因此应该进行四舍五入。

有关更好的解释,请参阅著名的文章。

票数 1
EN

Stack Overflow用户

发布于 2010-03-14 15:27:11

点后的位数对fscanf没有任何影响。您应该去掉&*,并在字符串的末尾添加一个新行:

代码语言:javascript
复制
fscanf(fp, "%f %f %f\n", p1 + i, p2 + i, p3 + i);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2441475

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档