c - 使用 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);
}
解决方案
标准输入上的输入(请使用STDIN_FILENO
而不是“幻数” 0
)通常是text。
您尝试将输入读取为值的原始二进制表示。
除非您知道输入将是原始二进制形式(例如来自二进制文件的重定向或来自另一端正在写入原始二进制数据的管道),否则我建议您读入字符缓冲区,确保缓冲区为空- 终止(你必须自己做,read
如果成功则返回位置),并使用 eg sscanf
orstrtod
来转换字符串。
推荐阅读
- java - 如何将类实例放在边界布局的北部?
- android - android app beta版和公版可以存在于同一部手机吗?
- javascript - 如何在多个页面中包含搜索或过滤功能
- mongodb - 如何修复 mongodb spring boot 应用程序中 LocalDate 字段的 localdate UTC 问题?
- node.js - 如何扩展这个用户界面?
- telegram - 如何在电报中获取可用于 TdApi 中的 t.me URL 的消息 ID?
- flutter - 无法将firebase存储图像网址存储到firestore
- python - 错误:由于环境错误而无法安装软件包:[Errno 9] 文件描述符错误
- r - 警告:terms.formula 中的错误:找不到对象“risktable”
- google-analytics - 如何在 Google Analytics 中获取完整的引荐来源网址(社交网络)