主要探索:
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;
}
文件I/O
文件中数据组织形式氛围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;
}
运行结果: