get() 和getline()
cin.getline()和cin.get()都是对输入进行行的读取,即一次读取一整行而不是单个字符,但是二者仍然有一定区别
cin.get()每次读取一整行并把由enter生成的换行符留在输入队列中,而cin.getline()每次会读取一整行,但是会将enter生成的换行符抛弃
缓存同步的实现
对文件流进行操作时,他们与一个streambuf类型的缓存联系在一起,而这个缓存实际上是一块内存空间,作为流和物理文件的媒介
例如一个输出流中,每一次一个成员函数put被调用(即写入一个字符),这个字符不是直接被写入该输出流所对应的物理文件中,而是首先被插入到该流的缓存中。
当缓存被排放出来时,其中的所有数据若是输出流,就被存储到物理媒介中,输入流的话就被简单抹去,这个过程就称为同步
同步主要发生在
- 当文件被关闭时:在文件被关闭之前,所有还没有被完全写出或读取的缓存都将被同步。
- 当缓存满了时:缓存有一定空间限制,当缓存满了后将会被自动同步
- 当控制符明确指明时:当遇到某些流中特定的控制符时,就会进行同步,比如flush和endl
- 当明确调用函数sync()时:函数会立即引发同步,函数会返回一个int值,若返回-1则表示流没有联系的缓存或操作失败