经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » C++ » 查看文章
C++学习之IO流(输入输出流)详解
来源:jb51  时间:2021/12/15 8:46:17  对本文有异议

介绍

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

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

流类体系

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

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

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

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

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

基本输入、输出流

istream 类---cin? ? ? ?输入

ostream类---cout? ? ?输出

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

  • cerr ---标准出错
  • clog ---日志文件输出
  1. #include <iostream>
  2. using namespace std;
  3. void testostream() //output
  4. {
  5. //freopen()
  6. cout << "标准输出" << endl; //cin/cout都可以重定向
  7. cerr << "标准错误输出" << endl; //不能重定向 当觉得程序可能出错时用cerr输出,标识作用
  8. clog << "日志文件输出" << endl; //可以重定向为文件
  9. }
  10. int main(){
  11. testostream();
  12. }
  13. /*输出*/
  14. /*标准输出
  15. 标准错误输出
  16. 日志文件输出*/

freopen

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

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

输入重定向

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

输出重定向

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

字符类的处理

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

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

  1. //调用成员函数的方式传常量、变量都可以
  2. void testostream()
  3. {
  4. //单个字符的输出
  5. cout.put('a'); //传常量 通过IO流对象调用成员函数的方式
  6. cout << 'a' << endl; //正常的输出方式
  7. char c = 'C';
  8. cout.put(c); //传变量
  9. cout << c << endl;
  10. //多个字符/字符串的输出
  11. cout.write("ILoveyou",4); /*直接写入输出 后面的参数:指定长度,超过长度的部分不做输
  12. 出截取输出没有'\0',只截取了前面4位*/
  13. }
  14. int main(){
  15. testostream();
  16. }
  17. /*输出*/
  18. /*aa
  19. CC
  20. ILov*/

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

  1. void testostream()
  2. {
  3. //单个字符的输入
  4. /* char c;
  5. c=cin.get();
  6. cout.put(c); 用中间变量接收返回值,再做输出*/
  7. cout.put(cin.get()); //要处理回车
  8. cout << endl;
  9. //多个字符/字符串的输入
  10. cout << "字符串的处理"<<endl;
  11. while (cin.get() != '\n');
  12. //while(getchar()!='\n');
  13. char str[20] = ""; //准备一个字符串 注意不是返回值不能一步到位
  14. cin.getline(str, 20);//输入函数
  15. cout.write(str, 20); //输出函数 相对于流操作更安全,可以指定长度,同样需要清空缓冲区处理
  16. }
  17. int main() {
  18. testostream();
  19. }
  20. /*输出*/
  21. /*a
  22. a
  23. 字符串的处理
  24. hello
  25. hello*/

注意不能用来处理string

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

格式控制字符

包含头文件 <iomanip>

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

  • 设置有效位数: setprecision(n)
  • 设置精度: fixed 结合 setprecision 使用

tip:流控制字符---c++用来控制格式的操作

设置格式

  1. int main(){
  2. double pi = 34.12343;
  3. cout << "设置有效位数是:" << setprecision(4) << pi << endl; //从整数位开始算
  4. cout << "有效小数位:" << fixed << setprecision(4) << pi << endl;//从小数位开始算
  5. //所有的流控制符都会对应一个成员函数的方式
  6. cout.precision(4);
  7. cout << "有效小数位:" << pi;/*设置完流格式不一定要立即输出,
  8. 可以缓慢输出(在下一行输出)*/
  9. double pi = 34.12369;
  10. cout << "设置有效位数是:" << setprecision(4) << pi << endl;
  11. cout << "有效小数位:" << fixed << setprecision(4) << pi << endl;
  12. cout.precision(4); //所有的流控制符都会对应一个成员函数的方式
  13. cout << "有效小数位:" << pi;
  14. }
  15. /*输出 四舍五入 */
  16. /* 设置有效位数是:34.12
  17. 有效小数位:34.1234
  18. 有效小数位:34.1234
  19. 设置有效位数是:34.12
  20. 有效小数位:34.1237
  21. 有效小数位:34.1237 */

进制输出

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

对齐方式和数据的宽度问题? ? ? ? 制表符 '\t'

限制每个数据的位数不足补空格?

1. 8位制表,不足8位? 补空格? ? ? ?

2. 超过8位,按照16位制表?

  1. //默认右对齐
  2. int main(){
  3. cout << setw(8) << "123" << setw(8) << "12344" << setw(8) << "3444" << endl;
  4. cout << setiosflags(ios::left);//ios::right右对齐 ios::left左对齐 数据不够用空格占位
  5. cout << setw(8) << "123" << setw(8) << "12344" << setw(8) << "3444" << endl;
  6. /*cout.width(8);
  7. cout<<"123"<<"123"<<"666"; 调用成员函数的方式,只能管一个制表
  8. }
  9. /*输出*/
  10. 123 12344 3444 //默认是右对齐方式
  11. 123 12344 3444
  12. 123 123666

到此这篇关于C++学习之IO流(输入输出流)详解的文章就介绍到这了,更多相关C++ IO流内容请搜索w3xue以前的文章或继续浏览下面的相关文章希望大家以后多多支持w3xue!

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号