C++Primer Plus --- 输入,输出和文件

1. C++ 程序通常在用户按下回车键时刷新输入缓冲区。

    C++ I/O定义了一些类模板,以支持char 和 what_t 数据。使用typedef工具,C++使得这些模板char具体化到能模仿传统的非模板I/O实现。下面是相关类:

  • streambuf 类为缓冲区提供了内存,并提供了用于填充缓冲区,访问缓冲区内容,刷新缓冲区和管理缓冲区内存的类方法; 
  • ios_base 类表示流的一般特征,如是否可读取,是二进制流还是文本流等;
  • ostream,istream都是从ios类派生来的,提供了输出和输入方法;
  • iostream类是基于istream和ostream类的,因此继承了输入和输出方法。

要使用这些工具,必须使用适当的类对象。例如cin cout。

2. 重载的<<操作符

   << 默认含义是按位左移操作符,但是ostream类重新定义了<<操作符,方法是将其重载为输出。

在这种情况下,<<叫做插入操作符,而不是左移操作符。插入操作符被重载,使之能够识别C++中多有基本类型。ostream都提供了operator<<() 函数的定义。

    例如: ostream & perator<<(int) 表示函数接受一个int参数。

3. write()显示整个字符串,模板原型为:

   basic_ostream<charT, traits>& write(const char_type* s, streamsize n);

   cout.wirite() 调用cout对象,因为write方法返回一个指向调用它的对象的引用,这里调用它的对象是cout.

write方法并不会在遇到空字符时自动停止打印字符,而只是打印指定数目的字符,即使超过了字符串的边界!

    writ()方法也可以用于数值数据,可以将地址强制转换为char*,然后传递给它。

    long val = 4545121212;

    cout.write((char*) &val, sizeof(long)); 

4. 刷新缓冲区

   缓冲区被填满,程序将flush刷新缓冲区,把内容发出去,并清空缓冲区,以存储新的数据。  

   通常缓冲区为512字节或其整数倍。

   但是,在屏幕输出时,不用等到缓冲区填满,例如将换行符发送到缓冲区,将刷新缓冲区;另外输入即将发生缓冲区刷新。

   实际上,控制符也是函数。 例,可以直接调用flush()来刷新cout缓冲区; flush(cout);

5. c++ 将十六进制和八进制都视为无符号的。

6. 使用cin进行输入

   cin对象将标准输入表示为字节流。输入流的方法,跳过空白(space, enter, tab),直到遇到非空白字符。即使对于单字符模式,>>操作符将读取一个指定类型的数据。也就是说,它读取从非空白字符开始,到与目标类型不匹配的第一个字符之间的全部内容。

7. 流状态

   设置状态

   clear() 在输入不匹配或到达文件尾时,需要使用不带参数的clear()重新打开输入。

   setstate() 为了输入和输出函数提供一种修改状态的途径。例如:setstate(eofbit)

8. get(char&) 和 get(void) 提供不跳过空白的单字符输入功能。

   cin.get(ch)指向istream对象的引用,到达文件末尾时函数返回值,转换为false

   cin.get(void)字符编码 int, 到达文件末尾时函数的返回值是EOF

9. 字符串输入:getline() get()  ignore()

   get()将换行符留在输入流中,这样接下来的输入操作首先将看到换行符;

   getline()抽取并丢弃输入流中的换行符。

10. 文件输入和输出

  字处理程序创建文件;数据库程序创建和搜索信息文件;编译器读取源代码文件并生成可执行文件。文件本身是存储在某种设备上的一系列字节。

11. 随机存取

   随机存取指的是直接移动(不是依次移动)到文件的任何位置。随机存取通常被用于数据库文件,程序维护一个独立的索引文件,该文件指出数据在主数据文件中的位置。

12. cin.get(char)成员函数调用通过返回转换为false的bool值来指出已达到EOF, 而cin.get()成员函数调用则通过返回EOF值来指出已达到EOF,EOF在文件iostream中定义的。

转载于:https://my.oschina.net/leaynOntheroad/blog/169492

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值