gpt4 book ai didi

c++ - fstream 产生非常奇怪的行为

转载 作者:行者123 更新时间:2023-11-30 03:30:54 25 4
gpt4 key购买 nike

当我向文件流写入一个 double ,然后写入一个整数时,整数会作为额外数字附加到 double ,我不知道为什么会这样。有人可以为我解释一下吗?最小示例:

#include <iostream>
#include <fstream>

int main()
{
std::fstream s("test.bin", std::fstream::binary | std::fstream::trunc | std::fstream::in | std::fstream::out);
s << 3.14;
int n = 36;
s << n;
s.seekp(0);
double d;
s >> d;
printf("%f\n", d);
}

我期望发生的事情:

  • 程序打开一个名为 test.bin 的文件
  • 它将值 3.14 写入文件(8 字节)
  • 它将值 36 写入文件(4 字节)
  • 它跳回到缓冲区的开头
  • 读取一个double类型的值(8字节)
  • 打印值(显示3.140000)

实际发生了什么:程序输出 3.143600 - 我完全不知道为什么会这样。这是零意义。如果我更改初始值,比如从 3.1418.3204,那么它会输出 18.320436。发生了什么事?

最佳答案

It writes the value 3.14 to the file (8 bytes)
It writes the value 36 to the file (4 bytes)

这不是发生的事情。 >><<和 friend 以人类可读的形式读写值。

s << 3.14;将数字 3、句号、数字 1 和数字 4 写入文件(4 个 ASCII 字符)。 s << 36;将数字 3 和数字 6 写入文件(2 个 ASCII 字符)。

然后该文件包含 6 个 ASCII 字符:一个 3、一个句点、一个 1、一个 4、一个 3 和一个 6。或者像任何正常人会​​写的那样:它包含 3.1436 .

s >> d;从文件中按字符读取数字,直到找到一个看起来不像数字的字符,然后将读取的字符转换为数字(与将它们输入 cin 时的转换方式相同) ).它读取 3,句点,1、4、3、6,然后产生数字 3.1436。

关于c++ - fstream 产生非常奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44641558/

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