c++输入输出

1. c++输入输出对象

  1. 标准I/O(设备):对系统指定的标准设备输入输出,如键盘、显示器
  2. 文件I/O(文件):对磁盘文件为对象进行输入输出
  3. 串I/O(内存):对内存中指定空间输入输出

2. c++为什么不沿用c语言的printf和scanf

  c语言中的printf和scanf不能保证输入输出的数据可靠性与安全性,编译系统不对数据的合法性进行检查,如scanf不小心漏掉&,如不小心用格式符%d输出字符串:

	printf("%d","hello"); //会输出字符串的首地址

并且c语言的的I/O只能输出标准类型,无法输出用户自己声明的类型,如数组、结构体、类等。c++的iostream一个重要特性就是其高可拓展性

3.c++的格式控制符

  c++格式控制符是在iomanip头文件上定义的

 //控制符控制
 int a = 17;
 cout << "dec:" << dec << a << endl; //十进制
 cout << "hex:" << hex << a << endl; //十六进制
 cout << "oct:" << setbase(8)<< a << endl;  //八进制
 char *pt = "china";
 cout << setfill('*')<<setw(10) << pt << endl;  //'*'填充,宽度为10
 double pi = 22.0 / 7.0;
 cout << setiosflags(ios::scientific) << setprecision(8); //科学计数法,小数点位数为8
 cout << "pi=" << pi << endl;
 cout << "pi=" << resetiosflags(ios::fixed) << setprecision(4) << pi << endl;  //小数形式输出,4为小数
 /*输出:
 dec:17
hex:11
oct:21
*****china
pi=3.14285714e+000
pi=3.1429e+000
 */
 //流控制
 cout.setf(ios::showbase);//显示进制,默认十进制
 cout << "dec:" << a << endl;
 cout.unsetf(ios::dec);//终止十进制
 cout.setf(ios::hex);//设置十六进制
 cout << "hex:" << a << endl;
 //cout.width(10);
 //cout.fill('*');
//cout.setf()常用输入:iso::uppercase,大写输出;iso::showpos,输出正数显示+号;

说明:
  width(n)只对第一个输出有效;
   setiosflags(ios::scientific)后在设置setiosflags(ios::fixed)输出十六进制数0x1.9249p+1,原因是流格式化设置并不像按钮一样,新的设置会自动覆盖原先的设置,这里要使用resetiosflags()重置才行,或者用set(fmt,mask)。

4.输入输出缓存区

  缓冲区是用作中介的内存块,主要作用是提高处理输入输出的效率,原因在于像磁盘驱动器这样的设备通常是以512字节的块为单位来传输信息,而程序每次只能处理一个字节.所以通过缓冲的方法,一次从磁盘读取大量的信息存储到缓冲区,程序再从缓冲区中每次读取一个字节,因为从内存中读取一个字节的时间要远小于从磁盘读取的时间。
  streambuf类为缓冲区提供内存并提供了填充缓冲区,访问缓冲区,刷新缓冲区,管理缓冲区等方法。
  缓冲flush时,里面所有数据被写入或者被抹掉,这个过程叫同步,它会发生在一下情况:

  • 程序正常结束。作为main返回工作的一部分,将清空所有的输出缓冲区。
  • 缓冲区满时,需要刷新缓冲区,而后数据才可以写进缓冲区。
  • 用操纵符显示地刷新缓冲区,如用endl。
  • 在每次输出操作执行完毕后,用unitbuf操纵符设置流的内部状态,从而清空缓冲区。
  • 可将输出流与输入流关联起来,在读输入流时将刷新其关联的输出缓冲区。

#4. 文件流
  头文件fstream定义了三个类型来支持文件IO:ifstream从文件读取;ofstream从文件写入数据;fstream可以读写给定文件。
  我们读写文件时,可以定义一个文件流对象,然后和文件关联,每个流都定义了open()成员函数,来定位给定文件。`````

ifstream in(ifile);//打开文件ifile
ofstream out;//未关联
in.close();//关闭
out.open(ifile+".copy"); //打开指定文件

文件打开模式:

文件模式解释
in以读方式打开
out以写的方式打开(会丢失已有数据)
app每次写操作前均定位到文件末尾
ate打开文件后立即定位到末尾
trunc截断文件
binary二进制方式IO
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值