C++ I/0流

流:若干字节数据从一端到另一端

流操作: 流对象加上流运算符(左移右移)

流类体系(包含以下三种的一个类)

1 输出输出流

        1.1 ostream 类  cout  cerr clog(日志)

                cour 标准输出               可重定向

                cerr 标准错误输出        不能重定向

                clog 标准错误输出        重定向为文件

重定向:把输入输出定向为 文件,例如C语言 freopen()

        1.2 istream 类   cin

#include <iostream>
#include <cstdio>
#include <iomanip>
using namespace std;
void testostream()     //output 
{
	//freopen()
	cout << "标准输出" << endl;		 //重定向
	cerr << "标准错误输出" << endl;	 //不能重定向
	clog << "标准错误输出" << endl;   //重定向为文件
	//字符类的处理
	//输出字符
	cout.put('a');
	cout << 'a' << endl;
	char c = 'C';
	cout.put(c);
	cout << c << endl;
	//输出字符串
	cout.write("adidadaqikounowan",10);  //指定长度,超过长度不做输出
	cout << endl;
	//cout.write("adidadaqikounowan", 120);  //指定长度,超过长度不做输出
	cout << endl;
	//输入
	//c=cin.get();
	cout.put(cin.get());		
	//字符串
	while (cin.get() != '\n');
	//while(getchar()!='\n');
	char str[20] = "";
	cin.getline(str, 20);//		不能处理string类型
	cout.write(str, 20);
}
void testiomanip()
{
	//格式控制  
	//设置格式
	double pi = 34.12343;
	cout << "设置有效位数是:" << setprecision(4) << pi << endl;
	//小数位需要结合fixed
	cout << "有效小数位:" << fixed << setprecision(4) << pi << endl;
	//cout.precision(4); 所有的流控制符都会对应一个成员函数的方式
	//进制输出
	cout << hex << 32 << endl;  //十六进制
	cout << oct << 15 << endl;  //8进制输出
	//可以设置某些进制 8 -10-16进制
	cout << setbase(10) << 15 << endl; //8-16
	//默认右对齐
	//cout.with(8);
	// 取消格式对齐方式
	//cout << resetiosflags << endl;
	//对齐方式  左对齐 右对齐
	cout << setiosflags(ios::left);	//ios::right
	//设置输出宽度
	cout << setw(8) << "123" << setw(8) << "12344" << setw(8) << "3444" << endl;
	cout << setw(8) << "123" << setw(8) << "12344" << setw(8) << "3444" << endl;
}
int main() 
{
	//testostream();
	testiomanip();
	return 0;
}

2字符流

        用的头文件是 sstream类 (父类)

                istringstream(子类)

                ostringstream(子类)

                一般用sstream类对象即可

        获取字符流对象中的数据

                string str()                //获取string

                void str(const string &str);        //重新设置字符流对象的数据

        一般用于字符串的分割和转换

#include <iostream>
#include <sstream>
#include <cstdio>
using namespace std;
//23,132,3443,54,54,65
void teststringstream()
{
	//构建字符流对象 ,以及获取字符流对象中数据
	stringstream sso(string("ILoveyou"));
	cout << sso.str() << endl;
    //无参构造
	stringstream ssnull;
	ssnull << "我爱你!";
	cout << ssnull.str() << endl;
	//错误 没有赋值这种操作
	//stringstream ss = string("IMissyou");

	string  data;
	ssnull >> data;
	cout << data << endl;
	ssnull.str("ILoveyou");
	//ssnull.clear();  
	cout << ssnull.str() << endl;
	//字符串与数字之间转换
	int num = 1234;
	char input[20] = "";
	stringstream transs(input);
	transs << num;
	transs >> input;
	cout << input << endl;
	stringstream snum("12345");
	int temp = 0;
	snum >> temp;
	cout << temp << endl;
	//分割
	stringstream sData("23,132,3443,54,54,65");
	int numData[6];
	char cData[5];
	for (int i = 0; i < 6; i++) 
	{
		if (i == 5)
			sData >> numData[i];
		else
			sData >> numData[i] >> cData[i];
	}
	for (int i = 0; i < 6; i++) 
	{
		cout << numData[i] << " ";
	}
	cout << endl;
	//多次同一个流做数据转换操作,一定做clear操作
	transs.clear();
	transs << num;
	transs >> input;
	cout << input << endl;
}
int main() 
{
	teststringstream();
	//char str[20] = "";
	//int num;
	//scanf_s("%d%s", &num, str,20);
	//cout << num << " " << str << endl;
	return 0;
}

3 文件流

        流类体系        

                ofstream 类 写操作  output输出到文件

                ifstream  类  读操作 

                fstream 类 可读可写 用的时候包含头文件#include<fsrream>

        打开关闭文件

                打开文件 void open(const char* URL,ios::openmode mode);

                        读写方法

                                ios::in 读的方式打开文件

                                ios::out 写的方式打开文件 具有创建功能

                                ios::app 追加模式   具有创建功能

                                 ios: ate 追加模式 文件指针指向末尾

                                ios::trunc  具备创建功能

                                ios:: noreplacr 不替换(C语言  w)

                                ios:: nocreate 不创建

                                ios::binary 二进制方式 

         读写的组合方式用的是

                可读可写可创建               ios::in||ios::out||ios::trunc

                二进制可读可写可创建        ios::bianry||ios::in||ios::out

        判断文件是否打开成功

                用文件流对象重载的运算

                is_open() 成员函数判断

                        返回true 打开成功

                        返回false 打开失败

                关闭文件  void close();

读写文件

        流的方式读写

        二进制方式读写

        把string写到文件  需要先转换为char*

文件指针定位

        ifstream 类的对象

                istream& seekg(long int pos,ios_base::seekdir position);

        ofstream 类的对象

                ostream& seekg(long int pos,ios_base::seekdir position);

        ios_base::seekdir

                ios::beg  文件开始位置

                ios::end  文件结束位置

                ios:: cur  文件当前位置

上一篇:前端如何低门槛开发iOS、Android、小程序多端应用


下一篇:2021超哥音视频图像处理,网络通讯封笔之作