c++11学习笔记之(iostream)缓冲区

来源:互联网 发布:编程字体推荐 编辑:程序博客网 时间:2024/06/05 00:14

c++ primer 5 中page 23页中术语表中缓冲区(buffer)概念不是很清楚。故终结如下

缓冲区(buffer)一个存储区域,用于保存数据。IO设备通常将输入/输出数据保存在一个缓冲区中,读写缓冲区的动作通常与程序中的动作是无关的。我们可以显示的刷新输出缓冲,以便强制将缓冲区中的素具写入输出设备,默认情况下,读cin会刷新cout;程序非正常终止也会刷新cout。


cout  标准输出流 对应设备为屏幕,也可以被重定向输出到磁盘文件。经过缓冲区,缓冲区满后或遇到endl时向显时器输出。

cerr 标准错误流 对应设备为屏幕,不经过缓冲区,直接向屏幕输出有关信息。
cout 标准错误流 对应设备为屏幕。经过缓冲区,缓冲区满后或遇到endl时向显时器输出。

1.cout流
cout是console output的缩写。cout不是c++预定义的关键字,它是ostream流类的对象,在iostream中定义。

cout流在内存中对应开辟了一个缓冲区,用来存放流的数据,当向cout流插入一个endl时,
不论缓冲区是否已满,都立即输出流中所有数据,然后插入一个换行符。

在iostream中只对 << 和  >>运算符用于标准类型数据的输入和输出进行了重载。
用户自定义的类型数据输入和输出需要自己定义重载。

cout 流通常是传送到显示器输出,但也可以被重定向输出到磁盘文件。


2.cerr流
cerr流是标准错误流,被指定与显示器关联。
不经过缓冲区,直接输出给屏幕。

cout 流通常是传送到显示器输出,但也可以被重定向输出到磁盘文件。
而cerr流中的信息只能在显示器输出。


3.clog流对象
clog流对象也是标准错误流,它是console log的缩写。它的作用和cerr相同,都是在终端显示器上显示出错信息。
它们之间只有一个微小的区别:cerr是不经过缓冲区,直接向显示器上输出有关信息,而clog中的信息存放在缓冲区中,缓冲区满后或遇到endl时向显时器输出。



//////////////////////////////////////////////////////////////////////////以下看例子

4.cin

char ch;
while((ch=cin.get())!='\n')
  cout.put(ch+4);
cout<<endl;

char str[255];

cin.getline(str,255);

 

5.istrstream

#include
#include
using namespace std;
int main()
{
 char str[255]="1001 周云才 98.5";
 int num;
 char name[20];
 float score;
 istrstream is(str);
 is>>num>>name>>score;
 cout<<num<<" "<<name<<" "<<score<<endl;
 return 0;
}

6.获取字符串中的数字存入数组

#include
#include
#include
using namespace std;
int main(){
 char ch,str[255]="a123x456U17960?302tab5876";
 int a[10]={0},i=0;
 istrstream is(str);
 while(is.eof()==false){
  while(!isdigit(ch=is.get()));
  is.putback(ch);
  is>>a[i++];
 }
 copy(a,a+i,ostream_iterator(cout," "));
 cout<<endl;
 return 0;



0 0
原创粉丝点击