ostream/cout/cin

cout输出及基本格式

cout是ostream类的一个对象,ostream是ios的派生类,ios是ios_base的派生类。知道这个继承关系后,就不难理解cout输出格式的各种设置,能够更容易记忆是通过参数还是方法来设置。

cout是一个对象,所以它有各种定义好的方法和变量(静态或其它私有/公有变量)。

1、设置以不同进制显示数字(8进制:oct;10进制:dec;16进制:hex)。

进制通过控制符设置,控制符不是类的成员函数(可能是友元函数,不知道,反正是可以设置显示格式,控制符是一个函数)。

所以,不能通过类调用方法的形式。但是是个函数,就通过函数的方法调用:比如十进制:dec(cout)。把cout当参数传入。就可以修改cout的输出进制表达了。

2、调整字宽(字宽这个名字都不好理解 ,感觉很抽象,中文很少提字宽吧。字宽就是指要输出的这一批字符占多少列)。

成员函数:width()。cout.width(10)//就是10列,超出了就按实际情况,少于10列就显示10列,默认用空格填满不足10列的部分,也可以自己设置用“*”或其它字符填充。

这里要注意,设置字宽这个效果是有有效时间的,只对下一句输出起作用,再输出就恢复系统默认了,这个很鸡肋,它跟别的几个设置不一样,其它几个是永久有效,直到你自己再改成别的。

3、再说填充,是个成员函数:fill()。就是第2点中,不足字宽的时候,用什么填,默认是空格。

cout.fill(*);//就是用*填充。

这里要注意,这个就很可恶了,这个设置是全局有效上,width()设置字宽只生效一次。但这个呢是一直有效,除非,你再设置一次其它的。不然就一直是你设置的这个。

4、设置浮点数显示精确。

成员函数precision()。这个设置也是一直有效的,直到你再设置一个这个值 。

cout.precision(8); //默认是6位。

5、打印末尾的0和小数点。

这里要用ios_base定义的内部静态常量:showpoint,通过继承,ostream是能通过公有方法(setf())可以访问这个常量的。

cout.setf(ios_base::showpoint);//内置的静态变量。

6、setf(fmtflags,fmtflags):两个参数

ios_base里定义了很多的常数,有名称,通过setf可以使用这些名称,而不用去记具体要设置的那个开关应该是什么值。

两个参数,第一个参数表示要改的值,第二个参数表示要改的变量名。(实际不是这么说的,我这么说只是方便理解谁改谁)。

其实,ios_base里的很多设置,都是通过标识位控制。

掌握输入输出,首先要理解”流“这个东西,输出有输出流,输入有输入流。这个东西很抽象,平时我们说到”流“一般是个动词,很少会单独去说一个”流“字。所以对”流”这个概念很陌生,学的时候理解这个“流”字都要时间,搞不好,还理解不了。这就是学习的难点所在。C++里很多这种陌生的词,陌生的词/字用法。

在这里,我们把“流”当作一个名称,当作一个东西,从这个东西那里取一些东西,又把一些东西放到“流”这个东西里。

输出:把东西放到”流“那里去。

输入:从”流“那里拿出点东西来。

理解了”流“很多知识就可以串起来了,也就顺了。

比如,输入,当输入出现错误时,要怎么办?当输入出现错误,程序会自动把流关闭。不让拿也不让取东西了。这样如果想重新从”流“那里拿或者放东西,就要先把”流“再打开,再清除”流“里面已放的东西,才好放新的东西,(就是打扫干净屋子,再请新客)。

1、重新打开关闭的流:clear();这个函数,就是重新打开流。(至于它背后做了啥,可以不用知道。其实它就是设置了3个开关。eofbit,failbit,badbit,把这3个都设置为0。)。

2、清除”流“里的东西;没有专用工具,只能循环一个个取出来扔掉。while(cin.get()) continue;

cin输入的关键知识点:

单字符输入:

cin.get();//返回一个整数,将输入字符转换为整数返回。//空格也算

cin.get(var);//返回cin对象,将输入字符赋给var变量。//空格也算输入

cin>>var;//这样会跳过空格。

字符串输入:

cin.get(var,n,分界符);//读取n-1个字符或分界符之前的字符给var。不读取分界符

cin.getline(var,n,分界符);//读取n-1个字符或分界符之前的字符给var。读取并扔掉分界符。

cin.ignore(n,分界符);//读取n个字符或分界符之前的字符,并扔掉

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值