主要探索:
1 标准I/O
2 文件I/O
3 窜I/O 对内存中指定空间进行输入输出
首先标准I/O
输出格式控制
具体示例:
#include <iostream> #include <iomanip> //格式控制符在其中定义 using namespace std; //通过控制符控制输出格式 void control( int a){ cout<<"10进制"<<dec<<a<<endl <<"16进制"<<hex<<a<<endl <<"8 进制"<<setbase(8)<<a<<endl; char *pt="China"; cout<<setw(10)<<pt<<endl <<setfill('*')<<setw(10)<<pt<<endl; //制定宽度 和填充 double pi=22.0/7.0; cout<<setiosflags(ios::scientific)<<setprecision(8);//指数形式输出8位小数 cout<<"pi="<<pi<<endl; cout<<"pi="<<setprecision(4)<<pi<<endl //改为位小数 <<"pi="<<setiosflags(ios::fixed)<<pi<<endl; } //通过对象控制输出格式 void obj( int a){ //10进制显示 cout.setf(ios::showbase); //显示基数符号(ox或) cout<<"10进制"<<a<<endl; //默认10进制显示 cout.unsetf(ios::dec); //终止10进制的格式显示 //16进制的显示 cout.setf(ios::hex); //设置16进制显示 cout<<"16进制"<<a<<endl; cout.unsetf(ios::hex); //8进制显示 cout.setf(ios::oct); cout<<"8 进制"<<a<<endl; cout.unsetf(ios::oct); char *pt="China"; //指定域宽 cout.width(10); cout<<pt<<endl; //指定空白处用*填充 cout.fill('*'); cout<<pt<<endl; double pi=22.0/7.0; cout<<"pi="; //指定以科学计数法输出 cout.setf(ios::scientific); cout.width(14); cout<<pi<<endl; cout.unsetf(ios::scientific); //指定用定点形式输出 cout.setf(ios::fixed); cout.width(12); cout.setf(ios::showpos);//整数输出 + 号 cout.setf(ios::internal);//数符出现在左侧 cout.precision(6); cout<<pi<<endl ; } int main(){ int a; cin>>a; control(a); obj(a); return 0; }
几个标准I/O有关函数
#include <iostream> #include <iomanip> //格式控制符在其中定义 using namespace std; int main(){ char _char='S'; cout.put(_char); cout<<endl; putchar(_char); //cout.put(_char)作用相同 cout<<endl; //标准输入流 流提取符通常跳过输入流里面空格 tab键 换行等空白符 只有输入完数据后按回车键,数据才被送入键盘缓冲区,形成流 /* //cin.get()不带参数 int _num; while((_num=cin.get())!=EOF){ cout.put(_num); } */ /* //cin.get()带一个参数参数 char _test; while(cin.get(_test)){ cout.put(_test); } */ /* //cin.get()带多个个参数参数 char ch[20]; cin.get(ch,10,'\\n'); cout<<ch<<endl; */ /* //getline()使用示例 char ch[20]; cout<<"enter a string "<<endl; // i like C++./i study hard cin>>ch; cout<<"the first is :"<<ch<<endl;//i cin.getline(ch,20,'/'); cout<<"the second:"<<ch<<endl; //like C++. cin.getline(ch,20 ); cout<<"the thirst:"<<ch<<endl; //i study hard */ return 0; }
文件中数据组织形式氛围ASCII和二进制文件。
对ascii文件操作
具体示例:
#include <iostream> #include <fstream> #include <string> using namespace std; int main(){ //将数据输入文件 int a[10]; ofstream outfile("test.txt",ios::out); //建立文件流 if(!outfile){ cerr<<"open error"<<endl; exit(1); } cout<<"enter 10 int num:"<<endl; for(int indexLoop=0;indexLoop<10;indexLoop++){ cin>>a[indexLoop]; outfile<<a[indexLoop]<<" "; //向文件写入数据 文件以前内容被覆盖 不是将数据输出到屏幕,而是文件 } // outfile1<<str; //这时只能输入一个字符 outfile.close(); //将数据从文件输出 ifstream infile("test.txt",ios::in); if(!infile){ cerr<<"open error!"<<endl; exit(1); } int b[10]; for(int IndexLoop=0;IndexLoop<10;IndexLoop++){ infile>>b[IndexLoop];//不是通过屏幕进行数据输入,而是文件, cout<<" "<<b[IndexLoop]; } infile.close(); return 0; }
对二进制文件具体示例:
#include <iostream> #include <fstream> #include <string> using namespace std; int main(){ //将数据输入文件 int a[10]; //ofstream outfile("test.txt",ios::out); //建立文件流 ofstream outfile("test.dat",ios::binary); //建立文件流 if(!outfile){ cerr<<"open error"<<endl; exit(1); } cout<<"enter 10 int num:"<<endl; for(int indexLoop=0;indexLoop<10;indexLoop++){ cin>>a[indexLoop]; outfile.write((char *)&a[indexLoop],sizeof(int)); // outfile<<a[indexLoop]<<" "; //向文件写入数据 文件以前内容被覆盖 不是将数据输出到屏幕,而是文件 } // outfile1<<str; //这时只能输入一个字符 outfile.close(); //将数据从文件输出 //ifstream infile("test.txt",ios::in); ifstream infile("test.dat",ios::binary); if(!infile){ cerr<<"open error!"<<endl; exit(1); } int b[10]; for(int IndexLoop=0;IndexLoop<10;IndexLoop++){ //infile>>b[IndexLoop];//不是通过屏幕进行数据输入,而是文件, infile.read((char *)&b[IndexLoop],sizeof(int)); cout<<" "<<b[IndexLoop]; } infile.close(); return 0; }
字符窜流
#include <iostream> #include <strstream> using namespace std; int main(){ char a[20]="hello,world"; char b[20]; //字符串流关联的不是文件,不需要打开和关闭文件 ostrstream strout(b,sizeof(b)); //建立输出字符串流对象 第一个参数和数组c建立关联 第二个参数一般和数组长度相等 cout<<sizeof(a)<<endl; for(int indexLoop=0;indexLoop<sizeof(a);indexLoop++){ strout<<a[indexLoop]; cout<<a[indexLoop]; } cout<<endl; strout<<ends;//ends 是c++ I/O 操作符,插入一个'\\0' cout<<"array:"<<endl<<b<<endl; char _test[20]="hello,world!"; char _instr[20]; istrstream strin(_test,sizeof(_test)); //建立输入流对象,并与字符数组关联 for(int index=0;index<sizeof(_test);index++){ strin>>_instr[index]; } for(int i=0;i<sizeof(_instr);i++){ cout<<_instr[i]<<" "; } cout<<endl; return 0; }