我正在关注一些 C++ 中 OpenGL 的初学者教程,但是当我开始作为 ac# 程序员时,它让我认为很多事情是理所当然的。所以当我调试将我的 FPS 读数打印到输出时出现了我的问题。我认为该方法类似于我头顶上的 DebugPrintString,它需要一个 char* 并且基本上我正在打印“FPS:x”。我使用 scanf_s 将 fps 值放入字符数组中,但这是我的问题所在。字符数组必须有多大?
让我再详细说明一下:我的 FPS 读数存储为浮点数,因为帧/秒通常最终不是一个好数字。所以我的号码可能是 60,也可能是 59.12345。60 只需要 2 个字节,而 59.12345 需要 8 个(周期为 1)。所以我想“哦,好吧,我需要计算它的位数,没问题!” 男孩让我感到震惊。
我做了一种计算数字的方法,计算小数点左侧很容易,首先将其转换为 int 以删除小数点并除以 10(实际上我认为我在那里进行了一些位移)和计算我可以这样做的次数,直到我达到 0。现在要计算右侧的数字,我将乘以 10,减去数字,然后这样做直到它达到零。我认为该方法通常会返回 32。所以我 WTF'd 并在调试中查看了它,结果当你将浮点数相乘时有效地将数字列向上移动,因为众所周知的精度问题它只是附加了另一个数字!
我做了一些主要的谷歌搜索,但在 char str[128] 和 scanf 之上找不到任何内容,如果在 then 中执行 strlen(str) 减 1(空终止符)。但我希望有一个更优雅的解决方案。最后我只是将它转换为一个 int 并允许 9999 fps,还添加了一个检查以查看 fps > 9999 但我认为这不会发生。比 SEG FAULT 更安全 :(
TLDR:有没有办法获得浮点数的位数?scanf 是怎么做到的?!
抱歉发了很长的帖子,只是想分享我的挫败感>:D
编辑:拼写错误