C++语法基础--ostream,cout及其格式控制,缓冲区

原创 2013年08月08日 22:44:50
1.C++程序把输入和输出看作字节流:输入时,程序从输入流中抽取字节;输出是,程序将字节插入到输出流中。流充当了程序和流源或流目标之间的桥梁。

2.缓冲区是用作中介的内存块,它将信息从设备传输到程序或从程序传输给设备的临时存储工具。

3.在程序中包含iostream文件将自动创建8个流对象(4个窄字符流,4个宽字符流)
  cin对象对应于标准输入流  wcin与cin类似,但处理的是wchar_t类型(下同)
  cout对象对应于标准输出流 ,wcou类似。
  cerr对象对应于标准错误流,这个流没有被缓冲,wcerr类似 
  clog对象也对应着标准错误流,这个流被缓冲,wclog类似


4.重定向
  标准输入和输出流通常连接着键盘和屏幕。
  <:输入重定向
  >:输出重定向




5.使用cout进行输出
  ostream将数据内部表示(二进制位模式)转换为由字符组成的输出流
  *ostream类重载了<<运算符,使其能识别C++中所有的基本类型
     在C++中<<运算符的默认含义是按位左移

     Example:

          x<<3表示将x的二进制表示中所有的位向左移动3位

  *输出和指针
   ostream类还定义了下面指针类型的插入运算符函数
   const signed char*;
   const unsigned char*;
   const char*;
   void*;

   C++用指向字符串存储位置的指针来表示字符串,
   char ch[]="hello";
   char *p="hello";

   因此:

   cout<<ch; cout<<p;

   都将输出字符串

  *对于其它类型的指针,C++将其对应与void*,并打印其地址的数值表示,如果要输出字符串地址,则必须将其 转换为其他类型
   Example:
         char *p=hello;
         cout<<(void*)p;

  *ostream类的put(),write方法
   ostream& put (char c):
                 Put character
                 Inserts character c into the stream.
  
  ostream& write (const char* s, streamsize n):
                 Write block of data
                 Inserts the first n characters of the array pointed by s into the stream.

  Tips:
      write()方法并不会在遇到空白字符时自动停止打印字符,而只是打印指定数目字符,即使字符超出了边界,
      write不会将数字转换为相应的字符,而是传输内存中存储的位表示,但输出设备将把每个字节作为ASCll码解释
      Example:
      int main()
{

   const char* c="hello";
   const char* c1="nihao";
   cout.put('H').put('i')<<endl;
   cout.write(c,7)<<endl;
   int a=97;
//97的ASCll码为a
   cout.write((char*)&a,sizeof(int));
   return 0;
}


 output:
     Hi
     hello n
     a

     
 
6.刷新输出缓冲区
  通常缓冲区为512字节或其整数倍,当缓冲区填满时,程序将刷新缓冲区,把内容发送出去,并清空缓冲区
  *强行进行刷新:
   flush:刷新缓冲区
   endl:刷新缓冲区并插入换行符
   Example:
    int main()
{

   cout<<"hello"<<flush;
   cout<<" nihao"<<endl;
   return 0;
}


outpu:
hello nihao


  *事实上控制符也是函数,

  例如

    flush(cout);



7.用cout进行格式化
 *默认情况下,每个值都等于它的长度
  由于ios_base->ios->ostream,因此ios的格式控制符可以用于ostream对象或其子代,如cout
  ios_base& hex (ios_base& str):
                      Use hexadecimal base
                      Sets the basefield format flag for the str stream to hex.


  ios_base& oct (ios_base& str):
                      Use octal base
                      Sets the basefield format flag for the str stream to oct.


  ios_base& dec (ios_base& str):
                      Use decimal base
                      Sets the basefield format flag for the str stream to dec.



  Tips:
      一旦设置了格式控制符,将一直持续到下一个格式控制符出现为止
   Example:
   int main()
{

   int a=13;int b=14;
   cout<<hex<<a<<endl;
//d
   cout<<b<<endl;     //e
   cout<<oct<<a<<endl;  //15
   cout<<b<<endl;     //16
   cout<<dec<<a<<endl; //13
   cout<<b<<endl;   //14
  
   return 0;
}




8.调整字段宽度
     streamsize width() const:
                 Get field width,returns the current value of the field width.


     streamsize width (streamsize wide);
                 get field width,also sets a new field width for the stream.

   Tips:
      width方法只影响接下来显式的一个项目,然后恢复默认值,width默认情况下为右对齐 
   Example:
    int main()
{

    int size=cout.width(20);
    cout<<"size is: "<<size<<endl;
    cout<<"hello"<<endl;
  
   return 0;
}



 运行结果:
 




9.填充字符
  *新的填充字符将一直有效,直到更改它为止
 char fill() const;
         Get fill character, returns the fill character.

char fill (char fillch);
         sets fillch as the new fill character and returns the fill character used before the call.


 Example:
  int main()
{
   cout.fill('*');
   cout.width(30);
   cout<<"hello"<<endl;
   char c=cout.fill();
   cout<<c<<endl;
  
   return 0;
}

    运行结果:

   





10.设置浮点数的显式精度
    C++的默认精度为6位(但末尾的0将不显示)
   streamsize precision() const;
              Set floating-point decimal precision
              returns the value of the current floating-point precision field for the stream.
  
   streamsize precision (streamsize prec);
               Set floating-point decimal precision
               returns the value of the current floating-point precision field for the stream, also sets it to a new valu



  Example:
 int main()
{
   int n=cout.precision();
   cout<<n<<endl;
   cout<<(float)1/3<<endl;
   cout.precision(10);
   cout<<(float)1/3<<endl; 
  
   return 0;
}



 运行结果:
 






c++文件流基本用法(fstream, ifstream, ostream)

前言:c++的文件流处理其实很简单,前提是你能够理解它。文件流本质是利用了一个buffer中间层。有点类似标准输出和标准输入一样。c++ IO的设计保证IO效率,同时又兼顾封装性和易用性。本文将会讲述...
  • bichenggui
  • bichenggui
  • 2009年09月27日 10:59
  • 129581

iostream fstream ostream 用法

在看C++编程思想中,每个练习基本都是使用ofstream,ifstream,fstream,以前粗略知道其用法和含义,在看了几位大牛的博文后,进行整理和总结: 这里主要是讨论fst...
  • qingen1
  • qingen1
  • 2014年09月13日 15:52
  • 1287

ostream用法解释

  • 2012年12月02日 00:22
  • 14KB
  • 下载

C++ I/O流用法

 库自动定义了一些标准对象:cout, ostream类的一个对象,可以将数据显示在标准输出设备上. cerr, ostream类的另一个对象,它无缓冲地向标准错误输出设备输出数据. clog, 类似...
  • jackyxwr
  • jackyxwr
  • 2009年11月25日 13:50
  • 3843

C++语言中ostream

#include是标准的C++头文件,任何符合标准的C++开发环境都有这个头文件。 在旧的标准C++中,使用#includeiostream.h> 但在新标准中,用#include,而且在...
  • lijun5635
  • lijun5635
  • 2013年11月30日 22:51
  • 4702

c++文件流基本用法(fstream, ifstream, ostream)

前言: c++的文件流处理其实很简单,前提是你能够理解它。文件流本质是利用了一个buffer中间层。有点类似标准输出和标准输入一样。 c++ IO的设计保证IO效率,同时又兼顾封装性和易用...
  • hudfang
  • hudfang
  • 2015年11月04日 17:47
  • 3160

C++学习笔记:friend ostream &operator<<(ostream &stream, const Date& dt);

friend关键字c++中有个friend关键字,它能让被修饰的对象冲破本class的封装特性,从而能够访问本class的私有对象。简单来讲,就是如果你在A类中,申明了函数func()是你的frien...
  • founderznd
  • founderznd
  • 2016年07月12日 19:16
  • 2869

c++重载ostream的实现

#include using namespace std; class Point{ public: Point(int _x = 0, int _y = 0, int _z = 0):x(_x...
  • u010051302
  • u010051302
  • 2014年09月19日 04:26
  • 2097

C++ ostream 常用格式

注意一点: std::setw只对下一个输出值有效,其他选项所有随后的输出都有效,比如: case: std::cout 可见"AAAA"被扩展成了6个字符宽度,而BBBB没有被扩展...
  • HiHui
  • HiHui
  • 2017年03月05日 13:58
  • 702

C++ ostream与printf比较

这两天与一位网友就C++流与printf函数的问题吵了两天,有点儿火药味儿(http://www.cppblog.com/converse/archive/2010/07/06/119427.html...
  • imxiangzi
  • imxiangzi
  • 2015年08月12日 15:19
  • 1111
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++语法基础--ostream,cout及其格式控制,缓冲区
举报原因:
原因补充:

(最多只允许输入30个字)