c/c++语言开发共享C++学习之IO流(输入输出流)详解

目录介绍基本输入、输出流freopen字符类的处理介绍流: 若干字节数据从一端到另一端我们叫做流例如:操作文件,从程序到文件,数据的流动的操作称为流操作流类体系专门处理输入输出流、字符流、文件流,包含

目录
  • 介绍
  • 基本输入、输出流
  • freopen
  • 字符类的处理

介绍

流: 若干字节数据从一端到另一端我们叫做流

例如:操作文件,从程序到文件,数据的流动的操作称为流操作

流类体系

专门处理输入输出流、字符流、文件流,包含有:

  • 流对象
  • 流运算符 >>  <<

输入/出流对象 + 流运算符 >>  <<—处理输入输出的数据

字符流对象 + 流运算符 >>   <<   —处理字符流

文件的对象 + 流运算符 >>  <<    —读写文件

基本输入、输出流

istream 类—cin       输入

ostream类—cout     输出

tip:输出流除了cout外,还有一些别的对象(效果和cout一样)

  • cerr —标准出错
  • clog —日志文件输出
  #include <iostream>  using namespace std;  void testostream()     //output   {  	//freopen()  	cout << "标准输出" << endl;		//cin/cout都可以重定向  	cerr << "标准错误输出" << endl;	//不能重定向 当觉得程序可能出错时用cerr输出,标识作用  	clog << "日志文件输出" << endl;  //可以重定向为文件  }  int main(){         testostream();  }  /*输出*/     /*标准输出   标准错误输出   日志文件输出*/

freopen

把程序的输入、输出重定向为文件

重定向是文件中的数据的格式要与程序读取的格式一致

输入重定向

  #include<cstdio>  #include<iostream>  int main(){         freopen("1.txt","r",stdin);//参数:文件名 读写方式 流      int a,b;      scanf("%d%d",&a,&b);       //把基本输入定向为文件,程序所有的输入由文件完成      std::cout<<a+b;     }  /*输出*/     /* 在黑窗口输出3 */

输出重定向

  #include<cstdio>  #include<iostream>  int main(){         freopen("1.txt","r",stdin);//参数:文件名 读写方式 流      int a,b;      scanf("%d%d",&a,&b);       //把基本输入定向为文件,程序所有的输入由文件完成      std::cout<<a+b;      freopen("2.text","w",stdout);      printf("%d",a+b);     }  /*输出*/     /* 在2.txt中输出3 */

字符类的处理

  • 正常的操作
  • 通过io流对象调用成员函数的方式

单个字符和字符串的输出处理

  //调用成员函数的方式传常量、变量都可以  void testostream()      {  //单个字符的输出      cout.put('a');          //传常量    通过io流对象调用成员函数的方式  	cout << 'a' << endl;    //正常的输出方式     	char c = 'c';  	cout.put(c);    //传变量  	cout << c << endl;  //多个字符/字符串的输出  	cout.write("iloveyou",4); /*直接写入输出 后面的参数:指定长度,超过长度的部分不做输                                   出截取输出没有'',只截取了前面4位*/  }  int main(){         testostream();  }  /*输出*/     /*aa    cc    ilov*/

单个字符和字符串的输入处理

  void testostream()  {  //单个字符的输入  	/*  char c;  		c=cin.get();  		cout.put(c);    用中间变量接收返回值,再做输出*/  	cout.put(cin.get());    //要处理回车  	cout << endl;     //多个字符/字符串的输入  	cout << "字符串的处理"<<endl;  	while (cin.get() != 'n');  	//while(getchar()!='n');  	char str[20] = "";   //准备一个字符串   注意不是返回值不能一步到位  	cin.getline(str, 20);//输入函数  	cout.write(str, 20); //输出函数 相对于流操作更安全,可以指定长度,同样需要清空缓冲区处理  }  int main() {     	testostream();  }  /*输出*/     /*a    a    字符串的处理    hello    hello*/

注意不能用来处理string

   string text;   cin.getline(text,20);    //报错,不能处理string,只能处理char*

格式控制字符

包含头文件 <iomanip>

常用的格式控制,一种是调用成员函数方式,一种流控制字符去做

  • 设置有效位数: 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;  }  /*输出   四舍五入 */     /* 设置有效位数是:34.12     有效小数位:34.1234     有效小数位:34.1234      设置有效位数是:34.12     有效小数位:34.1237     有效小数位:34.1237    */    

进制输出

  int main(){  	cout << hex << 32 << endl;  //16进制  	cout << oct << 15 << endl;  //8进制输出  //流控制字符的方式  	cout << setbase(2) << 7 << endl; //2进制无效,不能是任意进制,任意进制的默认10进制输出  	  }  /*输出*/     /*20    17    7*/

对齐方式和数据的宽度问题        制表符 ‘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;     /*cout.width(8);      cout<<"123"<<"123"<<"666";    调用成员函数的方式,只能管一个制表        }  /*输出*/       123   12344    3444 //默认是右对齐方式  123     12344   3444     123     123666

到此这篇关于c++学习之io流(输入输出流)详解的文章就介绍到这了,更多相关c++ io流内容请搜索<计算机技术网(www.ctvol.com)!!>以前的文章或继续浏览下面的相关文章希望大家以后多多支持<计算机技术网(www.ctvol.com)!!>!

需要了解更多c/c++开发分享C++学习之IO流(输入输出流)详解,都可以关注C/C++技术分享栏目—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/990841.html

(0)
上一篇 2021年12月25日
下一篇 2021年12月25日

精彩推荐