c++ - 如何从文件中读取 double 值?

标签 c++ file c++11

我想出了以下代码:

#include <stdio.h>
#include <iostream>
#include <fstream>

int main() {
  std::ifstream a0;
  a0.open("data/a0", std::ios::in | std::ios::binary);
  double d;
  a0 >> d;
  printf("%e\n", d);
}

我编译使用

g++ -s -Wall -Wextra -pedantic -std=c++0x -o program program.cpp

但它不起作用 - 它打印 0(文件的实际前 8 个字节是 3D 8F A0 BB E0 00 00 00)。 更有趣的是,当 data/a0 文件不存在时,会输出垃圾,但如果该文件存在,则输出始终严格为 0。

我做错了什么?

最佳答案

如果文件是二进制文件,则必须使用未格式化输入函数:

double d;
if (!a0.read(reinterpret_cast<char*>(&d), sizeof(d))) {
  // error occurred
}
std::cout << d << '\n';

运算符 >> 进行格式化输入,这意味着它需要文件中的文本

编辑

抱歉,最初使用的是get()而不是read(),后者对于读取二进制格式的文本文件更有用。

关于c++ - 如何从文件中读取 double 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16626405/

相关文章:

file - FFMPEG:Windows 中的标准输出与文件

c++ - 复制构造函数优于移动构造函数?

c++ - 将 std::array 转换为 std::vector

c++ - 使用迭代器打印 multimap

visual-studio - Visual Studio输出文件权限?

java - HTML 5 文件上传使用 java servlet 访问被拒绝异常

c++ - 没有严格弱排序的有序集合

c++ - OpenCV - moments() 函数中的参数

c++ - Qt - Qt 命令提示符

c++ - 从数组中读取值有困难