首页 > 解决方案 > 使用 C read() 从标准输入读取双精度数

问题描述

根据Linux手册

#include <unistd.h>
ssize_t read(int fd, void *buf, size_t count);

尝试将文件描述符 fd 中的 count 个字节读入从 buf 开始的缓冲区。

我正在编写一个使用“read”(而不是 scanf)从标准输入读取双精度的 C 程序。下面是我得到的。我从控制台输入了 42.0、47.9 等输入。事实证明,该程序会产生随机输出。任何人都可以帮忙吗?

#include <stdio.h>
#include <unistd.h>

int main(){
    double x;
    read(0, &x, sizeof(x));
    printf ("Results = %g\n", x);
}

标签: cfloating-point

解决方案


标准输入上的输入(请使用STDIN_FILENO而不是“幻数” 0)通常是text

您尝试将输入读取为值的原始二进制表示。

除非您知道输入将是原始二进制形式(例如来自二进制文件的重定向或来自另一端正在写入原始二进制数据的管道),否则我建议您读入字符缓冲区,确保缓冲区为空- 终止(你必须自己做,read如果成功则返回位置),并使用 eg sscanforstrtod来转换字符串。


推荐阅读