c++ primer plus 第六版第十七章学习笔记

  1. Ostream类字符显示方法(需用对象调用);put(char)(用于单个字符显示);write(char*,int)(用于显示int指定的多个字符,不检查字符串是否越界),其第一个参数为读取数据的地址,第二个参数为所需读取的字符数(读取多个字符)或者字节数(读取单个字符或数值),若要读取二进制数值,将数值强制转换为char*类型并作为第一个参数,第二个参数则原数值类型所占的字节数(可以用sizeof+类型名),详见编程练习17.7。
  2. 刷新输出缓冲区(用于将不满缓冲区的内容发送到输出):将flush或endl与插入运算符<<连用即可
  3. cout格式化方法:

       1)专用方法(需要采用输出对象进行调用):

         2)调整字宽width(int),调用时不带参数返回字段宽度的当前设置,带int参数表示将下一个显示项目的字宽设置为参数                值,并返回以前字宽值。

        3)浮点数的显示精度precision(int),设置后将一直有效直到重新设置;对于默认模式该精度指显示的总位数,而对于定             点和科学模式则指小数点后的位数。

       4)填充字符fill(‘字符’),系统默认用空格填充字段中未被使用的部分,采用该方法可以将未使用的部分填充为自定义的字                  符,该修改将一直有效,直到重新设置。

       5)setf()方法:需要输出对象进行调用,可通过格式常量(ios_base类)作为参数控制多种格式化特性,所做出的修改将一              直有效直到被覆盖为止。有两个函数原型, fmflags setf(fmtflags):fmflags setf(fmtflags,fmtflags):fmtflags为bitmask              类型的typedef名,用于存储格式标记,两种函数       原型用于不同的格式控制,但返回值都是以前的设置值,可将其保                存用于恢复设置。具体格式常量定义p747、748.

      6)控制符(无参数):无需对象进行调用,直接采用“cout<<控制符”即可做相应的格式控制,例如:计数系统显示修改(dec、hex、oct),左对齐显示(left),一般控制符与格式常量相似。详见p751-752

      7)头文件iomanip定义的控制符:该文件定义的控制符一般带一个参数,无需对象调用,使用方法同上3),例如:setprecision(int)、setfill(int)、setw(int)分别用于设置精度、填充字符与字段宽度

     8)其他:

           a.格式作用范围:除设置字宽的格式(专用方法与控制符均有)只对下一个输出有效之外,其他设置均从设置开始之后所               有均有效,直到重新设置。

           b.恢复以前格式设置方法:采用setf()方法时将返回值保存到fmtflags变量,再在需要恢复时用该变量作为setf方法的参                数即可;采用unsetf方法将setf设置为1的为恢复为0;采用标准控制符,如:noboolalpha、noshowbase;

           c.启用浮点数的默认模式方法:定点和科学模式可用格式常量fixed、scientific启用,但是没有定义默认模式的格式常量,               可采用两种方法启用:cout.setf(0,ios_base::floatfield),cout.unsetf(ios_based::floatfiled);

          d.标准控制符与格式常量使用差别:很多标准控制符与格式常量形式相同,但是标准控制符可以直接与插入运算符<<连用               用于格式控制,而格式常量则是ios_base类声明中定义的作为setf方法的参数使用,且需加作用域解析运算符。

4、get()方法、与抽取运算符>>:

        a.单参数get()方法:用于单字符的输入,包含有参数和无参数两个版本,两种版本均不跳过空白(空格制表、换行均可接          受),带参数版本将读取字符传递给参数返回调用对象的引用,无参数版本返回读取字符int类型,即不能将无参数版本用            于拼接输入,到达文件尾时停止赋值,有参数版本将调用setstate(failbit)导致cin测试结果为false,无参数版本将返回                EOF(iostream提供的一个符号常量为int类型)。

        b.两参数get()方法,用于整行字符的输入,同样不跳过空白,但不能读取换行符,将换行符视为行尾,即读取到换行            符 为止,并将其留在输入队列中

      c.抽取运算符:将跳过空白,不能接受空格、制表、换行符,还可以进行数据转换。    

5、字符串输入方法getline(),get()

      共同点:a.均返回调用对象,可用于拼接函数

              b.get()、getline()方法均有两个版本,可接受两个或三个参数,对于接受两个参数的版本,第一个参数均为接受字符串内存单元的地址,第二个参数为读取的字符数(注意该整型参数必须要比读取的最大字符数大1,最后一个字符用于存储字符串结尾的空字符),第三个参数为可选参数,可用于指定分界符(字符串结束标志)若不指定默认为换行符

              c.函数均在读取到指定的最大字符数(第二个参数指定的数字减1)或出现指定的分界符(第三个参数指定的或默认的换行符)时停止

              d.均在遇到文件尾时设置eofbit,遇到流被破坏时设置badbit

     不同点:a.get()方法将分界符留在输入流中,而getline()方法将读取分界符然后将其丢弃,也就是说对于get()方法若读取其下一个字符将为其分界符,而对于getline()方法将为输入流中分界符后面的字符

             b.failbit设置行为不同:getlin方法在没有读取任何字符(换行符视为读取了一个字符),以及读取了最大数目的字符且下一个字符不是分界符(即一行输入超出最大字符限制)两种情况时将设置failbit;而get方法仅在没有读取到任何字符(分界符)时设置failbit

6、其他istream方法

a.ignore()方法

     原型:istream&ignore(int i=1,int=EOF);第一个参数为数字指定要读取的最大字符数(等于指定数目),第二个参数为指定的分界符,方法将在到达第一个分界符或读取到最大字符时停止,但该方法将丢弃所读取的字符。

   b.read()方法:

     与两参数的get、getline方法使用类似,但该方法不会在输入后加上空值字符即不能将输入转换为字符串,一般与write函数结合使用

c.peek()方法:

  返回输入流中的下一个字符,但不抽取输入流中的字符,即只能用peek方法查看下一个字符,但并不读取该字符,该字符仍将留在输入流中,若不对其进行抽取,peek读取的将一直是该字符。若用在get()方法后可用于判断一行是否读取完整(若返回分界符则表示一行读取完整)。

例:while ((ch=cin.peek())!='$')

      {

        count++;

    }

   该循环将一直持续(若第一个字符不是$),因为ch始终是第一个字符,peek不能抽取字符

while ((ch=cin.peek())!='$')

      {

        count++;

         cin.get(str[i++]);

    }

    采用get方法抽取字符便可以正常循环,且$字符将被留在输入流中

d.gcount()方法:

  返回最后一个非格式化抽取方法,即返回用get、getline、ignore、read方法读取字符,不能用于抽取运算符》该运算符将对输入进行格式化

e.putback()方法

  接收一个char参数(要插入的字符),将该字符插入到输入字符串中,该字符将是下一条输入语句读取的第一个字符。

7.文件格式

将数据存储在文件中时,有文本格式各二进制格式两种,文本格式是将所有内容存为文本,每个字符都单独视为一个文本(123.4将被存储为5个字符),而二进制格式则是指数据的计算机内部表示(123.4存储为这个值的64位double表示而不是存储5个字符),而对于字符数据而言,这两种格式表示都是一样的即存储字符的ASCII码的二进制表示。注意:<<插入运算符以及抽取运算符>>则是以文本格式来输出和输入数据,因此对于二进制文件的输入输出不应用这两个运算法,而是采用write和read方法(例见编程练习17.7)。

8.命令行处理文件:注意运行步骤,以及输入的命令格式(详见17.2)

9.Exit函数:在头文件cstdlib中定义,将直接退出程序,可接受int参数,将其作为返回代码输出,可采用符号常量EXIT_FAILURE(返回代码为1),EXIT_SUCCESS(返回代码为0)。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值