输入输出流和C++工具

1、输入输出流

(1)cout流在内存中对应开辟了一个缓冲区,用来存放流中的数据,当向cout

流插入一个endl时,不论缓冲区是否已满,都立即输出流中所有数据,然后插入一个换行符,并刷新流(清空缓冲区),注意如果插入一个\n,则只输出数据和换行,而不刷新out流;

(2)cerr是不经过缓冲区,直接向显示器上输出有关信息,而clog中的信息存放在缓冲区中,缓冲区满后或遇endl时向显示器输出;

(3)使用控制符控制输出格式:

控制符

作用

dec

设置整数的基数为10

hex

设置整数的基数为16

oct

设置整数的基数为8

setbase(n)

设置整数的基数为n(n只能是16,10,8之一)

setfill(c)

设置填充字符c,c可以是字符常量或字符变量

setprecision(n)

设置实数的精度为n位。在以一般十进制小数形式输出时,n代表有效数字。在以fixed(固定小数位数)形式和scientific(指数)形式输出时,n为小数位数。

setw(n)

设置字段宽度为n位。

setiosflags(ios::fixed)

设置浮点数以固定的小数位数显示。

setiosflags(ios::scientific)

设置浮点数以科学计数法(即指数形式)显示。

setiosflags(ios::left)

输出数据左对齐。

setiosflags(ios::right)

输出数据右对齐。

setiosflags(ios::shipws)

忽略前导的空格。

setiosflags(ios::uppercase)

在以科学计数法输出E和十六进制输出字母X时,以大写表示。

setiosflags(ios::showpos)

输出正数时,给出“+”号。

resetiosflags

终止已设置的输出格式状态,在括号中应指定内容。

(4)用流对象的成员控制输出格式

流成员函数

与之作用相同的控制符

作用

precision(n)

setprecision(n)

设置实数的精度为n位。

width(n)

setw(n)

设置字段宽度为n位。

fill(c)

setfill(c)

设置填充字符c。

setf( )

setiosflags( )

设置输出格式状态,括号中应给出格式状态,内容与控制符setiosflags括号中内容相同。

ubsetf( )

resetiosflags( )

终止已设置的输出格式状态。

(5)设置格式状态的格式标志

格式标志

作用

ios::left

输出数据在本域宽范围内左对齐

ios::right

输出数据在本域宽范围内右对齐

ios::internal

数值的符号位在域宽内左对齐,数值右对齐,中间由填充字符填充

ios::dec

设置整数的基数为10

ios::oct

设置整数的基数为8

ios::hex

设置整数的基数为16

ios::showbase

强制输出整数的基数(八进制以0打头,十六进制以0x打头)

ios::showpoint

强制输出浮点数的小点和尾数0

ios::uppercase

在以科学计数法输出E和十六进制输出字母X时,以大写表示

ios::showpos

输出正数时,给出“+”号。

ios::scientific

设置浮点数以科学计数法(即指数形式)显示

ios::fixed

设置浮点数以固定的小数位数显示

ios::unitbuf

每次输出后刷新所有流

ios::stdio

每次输出后清除stdout,stderr

(6)文件操作的一个示例

1>ASCII文件操作

#include <fstream>

#include<iostream>

using namespace std;

int main( )

{int a[10];

 ofstream outfile("f1.dat",ios::out);    //定义文件流对象,打开磁盘文件"f1.dat"

 if(!outfile)                          //如果打开失败,outfile返回值

  {cerr<<"open error!"<<endl;

   exit(1);

  }

 cout<<"enter 10 integer numbers:"<<endl;

 for(int i=0;i<10;i++)

  {cin>>a[i];

   outfile<<a[i]<<" ";}        //向磁盘文件"f1.dat"输出数据

 outfile.close();       //关闭磁盘文件"f1.dat"

 return 0;

}

2>二进制文件操作

#include <fstream>

#include<iostream>

using namespace std;

struct student

{string name;

 int num;

 int age;

 char sex;

};

int main( )

{student stud[3];

 int i;

 ifstream infile("stud.dat",ios::binary);

 if(!infile)

  {cerr<<"open error!"<<endl;

   abort( );

  }

for(i=0;i<3;i++)

infile.read((char*)&stud[i],sizeof(stud[i]));

  infile.close( );

  for(i=0;i<3;i++)

   {cout<<"NO."<<i+1<<endl;

    cout<<"name:"<<stud[i].name<<endl;

    cout<<"num:"<<stud[i].num<<endl;;

    cout<<"age:"<<stud[i].age<<endl;

    cout<<"sex:"<<stud[i].sex<<endl<<endl;

   }

  return 0;

 }

(7)字符串流示例

#include <strstream>

using namespace std;

int main( )

{char c[50]="12 34 65 -23 -32 33 61 99 321 32";

 int a[10],i,j,t;

 cout<<"array c:"<<c<<endl;//显示字符数组中的字符串

 istrstream strin(c,sizeof(c));  //建立输入串流对象strin并与字符数组c关联

for(i=0;i<10;i++)

  strin>>a[i];             //从字符数组c读入个整数赋给整型数组a

 cout<<"array a:";

 for(i=0;i<10;i++)

   cout<<a[i]<<" ";               //显示整型数组a各元素

 cout<<endl;

 for(i=0;i<9;i++)                   //用起泡法对数组a排序

for(j=0;j<9-i;j++)

      if(a[j]>a[j+1])

{t=a[j];a[j]=a[j+1];a[j+1]=t;}

 ostrstream strout(c,sizeof(c));   //建立输出串流对象strout并与字符数组c关联

 for(i=0;i<10;i++)

   strout<<a[i]<<" ";                 //将个整数存放在字符数组c

 strout<<ends;                  //加入'\\0'

 cout<<"array c:"<<c<<endl;           //显示字符数组c

 return 0;

}

2、C++工具

(1)    异常处理:检查(try),抛出(throw),捕捉(catch)

throw语句一般是由throw运算符和一个数据组成的,其形式为

throw 表达式;

try-catch的结构

try

{被检查的语句}

catch(异常信息类型[变量名])

{进行异常处理的语句}

(2)    命名空间

如:

namespace ns1//声明命名空间ns1

{class Student                 //在命名空间ns1内声明Student

{public:

Student(int n,string nam,int a)

 

{num=n;name=nam;age=a;}

void get_data( );

     private:

int num;

string name;

int age;

    };

 void Student::get_data()     //定义成员函数

     {cout<<num<<″″<<name<<″″<<age<<endl;

     }

 

 double fun(double a,double b)   //在命名空间ns1内定义fun函数

    {return sqrt(a+b);}

}(没有分号)

用法与定义与类相似

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值