标签:io os ar java for strong 文件 sp 数据
问题1,文本模式下将整型的x=10通过fwrite写入到文件out.txt中,用ultraledit查看out.txt的16进制格式,会发现代码为:0D 0A 00 00 00,但在内存中int型10存储为0A 00 00 00 ,前面的0D是怎么回事呢?
答:Windows操作系统下文本文件以回车符(‘\r‘,十进制13)换行符(‘\n‘,十进制10)组合在一起表示行分隔,这就意味Windows下输出的字节内容为OA(10)时,会自动在前面加一个OD。正式由于这种自动扩充给存储带来的问题。解决方法即通过二进制的方式写入 。
out.open("g://delete//out.txt",ios_base::binary);
// 问题1模拟程序 #include<fstream> #include<iostream> using namespace std; int main() { ofstream out; ifstream in; out.open("g://delete//out.txt",ios_base::binary); in.open("g://delete//out.txt",ios_base::binary); if(!in) { cout<<"in open failed"<<endl; } if(!out) { cout<<"out open failed"<<endl; } int x =10; out.write(reinterpret_cast<char *>(&x),sizeof(int)); out.close(); int r = 0; in.read(reinterpret_cast<char *>(&r),sizeof(int)); //即使是以文本形式产生了0D,fread读取的时候会自动取掉0D cout<<r<<endl; in.close(); return 0; }
问题2 随机产生50个具有三位整数两位小数的实型数据,如231.16,随机产生50个具有三位整数两位小数的实型数据,如231.16
#include<iostream> #include<fstream> #include<iomanip> #include <ctime> #define N 50 using namespace std; int main() { ofstream out; out.open("g:/delete/random.txt",ios::out); if(!out) { cout<<"can not open out!"<<endl; return -1; } double i,x; for(i=1;i<=N;i++) { x=(10000+rand()*3%90000)*1e-2; out<<setiosflags(ios::fixed)<<setprecision(2)<<x<<‘ ‘; } out.put(‘\n‘); out.close(); return 0; }
问题3 将前面产生的50个随机数读取到double型数组中并输出
/** * 随机产生50个具有三位整数两位小数的实型数据,如231.16 * 将这些数据写入到文件中,并且任意两个数据之间用空格隔开 */ #include<iostream> #include<fstream> #include<iomanip> #include<ctime> #include<string> #define N 100 using namespace std; int main() { string path = "g:/delete/random.txt"; freopen(path.c_str(),"r",stdin); //将标准输入重定向到文件 double data[N]; int l=0; while(scanf("%lf",&data[l])!=EOF) l++; for(int i=0;i<l;i++) cout<<data[i]<<endl; return 0; }
标签:io os ar java for strong 文件 sp 数据
原文地址:http://my.oschina.net/wangzijing/blog/331973