C++之I/O流

主要探索:

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;
}

运行结果:



已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页