gpt4 book ai didi

c - 读取 float 的最小缓冲区长度

转载 作者:太空宇宙 更新时间:2023-11-04 00:41:13 25 4
gpt4 key购买 nike

我正在编写一个小型命令行程序,它从标准输入读取两个 float 、一个整数和一个小字符串(最多 4 个字符)。我试图找出我应该创建并传递给 fgets 的缓冲区大小。我想我可以根据 floatint 的最大值分别包含多少位数来计算,如下所示:

#include <float.h>
#include <limits.h>

...

int fmax = log10(FLOAT_MAX) + 2; // Digits plus - and .
int imax = log10(INT_MAX) + 1; // Digits plus -
int buflen = 4 + 2*fmax + imax + 4; // 4 chars, 2 floats, 1 int, 3 spaces and \n

...

fgets(inbuf, buflen + 1, stdin);

但我突然想到,这实际上可能不正确。 imax 在我的系统上最终是 10,这看起来有点低,而 fmax 如果是 40。(我认为这有点高,因为更长的值可能用 e 符号表示。)

所以我的问题是:这是解决这个问题的最佳方法吗?这甚至是必要的吗?它只是感觉比分配一个 256 的缓冲区并假设它就足够了更优雅。称其为自豪感;P。

最佳答案

在这种情况下,我实际上会使用 fscanf 而不是先读入固定大小的缓冲区。如果您需要确保不跳过换行符或其他有意义的空格,您可以使用 fgetc 逐个字符地处理,直到获得数字的开头,然后 ungetc 在调用 fscanf 之前。

如果你想偷懒,就选一个大数字,比如 1000...

关于c - 读取 float 的最小缓冲区长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7425239/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com