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