以下代码将不可读的字符写入文本文件:
int main ()
{
ofstream myfile ("example.txt");
if (myfile.is_open())
{
double value = 11.23444556;
char *conversion = (char *)&value;
strcat (conversion, "\0");
myfile.write (conversion, strlen (conversion));
myfile.close();
}
return 0;
}
我想看到文件中写的实际数字:(请提示。
修改 看到下面的答案,我将代码修改为:
int main ()
{
ofstream myfile ("example.txt");
if (myfile.is_open())
{
double value = 11.23444556;
myfile << value;
myfile.close();
}
return 0;
}
这会产生投注: 11.2344 ,而实际数字 11.23444556 。我想要完整的号码。
编辑帖子以通知所有人: 不可读的字符是由于ofstream的写入功能:
这是一个未格式化的输出函数
此引用来自:http://www.cplusplus.com/reference/iostream/ostream/write/
答案 0 :(得分:26)
为什么不简单地这样做(在问题编辑后更新答案):
#include <iomanip>
myfile << std::fixed << std::setprecision(8) << value;
myfile.close();
现在,您可以看到文件中写入的实际数字。
请参阅std::setprecision
的文档。注意:您必须包含<iomanip>
标头文件。
答案 1 :(得分:3)
这里使用流操作符更容易:
#include <iostream>
#include <fstream>
#include <string.h>
using namespace std;
int main ()
{
ofstream myfile ("example.txt");
if (myfile.is_open())
{
double value = 11.23444556;
myfile << value;
myfile.close();
}
return 0;
}
给你你想要的东西。
答案 2 :(得分:1)
其他人提出了更好的方法但是如果你真的想要这样做,那么应该使用强制转换将char *转换为double *,反之亦然
#include <iostream>
#include <fstream>
#include <string>
#include <cstring>
using namespace std;
int main ()
{
ofstream myfile ("example.txt");
if (myfile.is_open())
{
double value = 11.23444556;
char *conversion = reinterpret_cast<char *>(&value);
strcat (conversion, "\0");
//myfile.write (*conversion, strlen (conversion));
myfile << *(reinterpret_cast<double *>(conversion));
myfile.close();
}
return 0;
}
答案 3 :(得分:0)
您可以将值写入文件,如下所示:
myfile << value;
使用value的地址作为参数strcat
会破坏您的堆栈,因为strcat
期望以0结尾的c-string作为第一个参数(并且实际分配空间)。