流: 若干字节数据从一端到另一端我们叫做流
例如:操作文件,从程序到文件,数据的流动的操作称为流操作
流类体系
专门处理输入输出流、字符流、文件流,包含有:
-
流对象
-
流运算符 >> <<
输入/出流对象 + 流运算符 >> <<---处理输入输出的数据
字符流对象 + 流运算符 >> << ---处理字符流
文件的对象 + 流运算符 >> << ---读写文件
基本输入、输出流istream 类---cin 输入
ostream类---cout 输出
tip:输出流除了cout外,还有一些别的对象(效果和cout一样)
-
cerr ---标准出错
-
clog ---日志文件输出
#includefreopenusing namespace std; void testostream() //output { //freopen() cout << "标准输出" << endl; //cin/cout都可以重定向 cerr << "标准错误输出" << endl; //不能重定向 当觉得程序可能出错时用cerr输出,标识作用 clog << "日志文件输出" << endl; //可以重定向为文件 } int main(){ testostream(); }
把程序的输入、输出重定向为文件
重定向是文件中的数据的格式要与程序读取的格式一致
输入重定向
#include#include int main(){ freopen("1.txt","r",stdin);//参数:文件名 读写方式 流 int a,b; scanf("%d%d",&a,&b); //把基本输入定向为文件,程序所有的输入由文件完成 std::cout<
输出重定向
#include字符类的处理#include int main(){ freopen("1.txt","r",stdin);//参数:文件名 读写方式 流 int a,b; scanf("%d%d",&a,&b); //把基本输入定向为文件,程序所有的输入由文件完成 std::cout<
-
正常的操作
-
通过IO流对象调用成员函数的方式
单个字符和字符串的输出处理
//调用成员函数的方式传常量、变量都可以
void testostream()
{
//单个字符的输出
cout.put('a'); //传常量 通过IO流对象调用成员函数的方式
cout << 'a' << endl; //正常的输出方式
char c = 'C';
cout.put(c); //传变量
cout << c << endl;
//多个字符/字符串的输出
cout.write("ILoveyou",4);
}
int main(){
testostream();
}
单个字符和字符串的输入处理
void testostream()
{
//单个字符的输入
cout.put(cin.get()); //要处理回车
cout << endl;
//多个字符/字符串的输入
cout << "字符串的处理"<
注意不能用来处理string
string text;
cin.getline(text,20); //报错,不能处理string,只能处理char*
格式控制字符
-
包含头文件
-
常用的格式控制,一种是调用成员函数方式,一种流控制字符去做
-
设置有效位数: setprecision(n)
-
设置精度: fixed 结合 setprecision 使用
tip:流控制字符---c++用来控制格式的操作
设置格式
int main(){
double pi = 34.12343;
cout << "设置有效位数是:" << setprecision(4) << pi << endl; //从整数位开始算
cout << "有效小数位:" << fixed << setprecision(4) << pi << endl;//从小数位开始算
//所有的流控制符都会对应一个成员函数的方式
cout.precision(4);
cout << "有效小数位:" << pi;
double pi = 34.12369;
cout << "设置有效位数是:" << setprecision(4) << pi << endl;
cout << "有效小数位:" << fixed << setprecision(4) << pi << endl;
cout.precision(4); //所有的流控制符都会对应一个成员函数的方式
cout << "有效小数位:" << pi;
}
进制输出
int main(){
cout << hex << 32 << endl; //16进制
cout << oct << 15 << endl; //8进制输出
//流控制字符的方式
cout << setbase(2) << 7 << endl; //2进制无效,不能是任意进制,任意进制的默认10进制输出
}
对齐方式和数据的宽度问题 制表符 't'
限制每个数据的位数不足补空格 1. 8位制表,不足8位 补空格 2. 超过8位,按照16位制表
//默认右对齐
int main(){
cout << setw(8) << "123" << setw(8) << "12344" << setw(8) << "3444" << endl;
cout << setiosflags(ios::left);//ios::right右对齐 ios::left左对齐 数据不够用空格占位
cout << setw(8) << "123" << setw(8) << "12344" << setw(8) << "3444" << endl;
123 12344 3444 //默认是右对齐方式
123 12344 3444
123 123666 


