zoukankan      html  css  js  c++  java
  • 《C++ Primer Plus》学习笔记11

    《C++ Primer Plus》学习笔记11

    第17章 输入、输出和文件
    <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    主要内容:
    1)C++角度的输入和输出
    2)iostream类系列
    3)重定向
    4)ostream类方法
    5)格式化输出
    6)istream类方法
    7)流状态
    8)文件I/O
    9)使用ifstream类从文件输入
    10)使用ofstream类输出到文件
    11)使用fstream类进行文件输入和输出
    12)命令行处理
    13)二进制文件
    14)随机文件訪问
    15)内核格式化
    <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    1、使用cout进行输出
    1)cout

    cout << value;
    //原型:ostream & operator<< (int)
    

    2)其它ostream的方法:
    put()方法 ——用于显示字符
    原型:ostream & put(char);

    cout.put('W'); //显示w字母,cout是调用方法的对象,put()是类成员
    cout.put('i').put('t'); //拼接输出
    //在原型合适的情况下,能够将数值型參数用于put(),让函数原型自己主动将參数转化为蒸汽的char值
    cout.put(65); //将65转化为char,显示
    cout.put(66.3); //将double值66.3转化为char值66。并显示对于字符
    

    3)write()方法 ——用于显示字符串
    原型:basic_ostream<char T, traits>& write(const char_type* s, streamsize n);
    第一个參数提供了要显示的字符串地址。第二个參数指出要显示多少个字符
    注意:write方法不会在遇到空字符时自己主动停止打印字符,而仅仅是打印指定数目的字符,即使超出了字符串的边界。
    4)刷新输出缓冲区
    控制符flush刷新缓冲区。而控制符endl刷新缓冲区,并插入一个换行符号

    cout << 'Hello, good-looking! ' << flush;
    cout << 'Wait just a moment,please. ' << endl;
    

    控制符也是函数,能够直接用flush()来刷新cout缓冲区

    flush(cout);
    //或者cout << flush;
    

    5)用cout进行格式化
    ostream插入操作符将值转为为文本格式,在默认的情况下,格式化值的方式例如以下:
    ①对于char值,一个字符显示在宽度为一个字符的字段中
    ②对于数值整型,以十进制的方式显示在一个刚好容纳该数字以及负号的字段里
    ③字符串被显示在宽度等于该字符串长度的字段中
    ④浮点型有点变化
    新式:浮点类型被显示为6位,末尾的0不显示。
    老式:浮点类型被显示带6位小数,末尾的0也不显示
    注意显示的位数和数字被存储的精度是没有关系的
    ⑤改动显示时使用的计数系统
    十进制dec,cout默认十进制
    十六进制hex控制符

    cout << hex;
    cout << n;
    

    八进制oct控制符

    cout << oct;
    cout << n;
    

    ⑥调整字段的宽度width

    int width();//返回字段宽度的当前设置
    int width(int i);//将字段宽度设置为i个空格。并返回曾经的字段宽度值
    cout.width(12);//记住是右对齐
    

    这里须要注意:width()方法仅仅影响接下来显示的一个项目,之后字段宽度将恢复为默认值。比如

    int w = cout.width(30);
    cout << w;
    

    注意这个时候显示字符串时候。字段宽度被设置为30,可是显示w的值时,字段宽度不是30,由于它影响的是接下来被现实的项目。所以显示为0
    ⑦填充字符

    cout.fill('*');
    

    注意这里与width不一样。它一直有效。
    ⑧设置浮点度的显示精度
    C++默认的位数是6,末尾的0将不显示,precision()成员函数使可以选择其他值。

    cout.precision(2);//将精度设置为2。新的精度设置也一直有效
    

    注意:老式C++版本号将默认模式的精度解释为小数点后面的位置,新式指的是总位数

    cout.precision(2);
    20.4 -> 20
    2.78889 -> 2.8
    

    ⑨打印末尾的0和小数点

    cout.setf(ios_base::showpoint); //使得cout显示末尾的小数点,默认精度为6位置
    20.04 -> 20.4000
    cout.precision(2);
    20.40 -> 20.
    2.78889 -> 2.8
    

    ⑩setf()
    控制了小数点被显示时,其它格式的选项
    原型一、

    fmtflags setf(fmtflags);
    cout.setf(fmtflags);//程序中这样书写
    

    格式常量fmtflags

    ios_base::boolalpha //输入和输出bool,能够为true或false
    ios_base::showbase //对于输出,使用C++基数前缀(0,0x)
    ios_base::showpoint //显示末尾的小数点
    ios_base::uppercase //对于16进制输出,使用大写字母E
    ios_base::showpos //在正数前面加上+
    

    原型二、

    fmtflags set(fmtflags, fmtflags);
    

    第一个參数是一个包括了所须要设置fmtflags值,第二个參数指出要清除第一參数的哪些位
    setf(long, long)的參数:
    第二个參数
    ios_base::basefield
    相应第一个參数有三个:ios_base::dec(基数10) ios_base::oct (基数8) ios_base::hex (基数16)
    第二个參数
    ios_base::floatfield
    相应第一个參数有两个:ios_base::fixed(使用定点计数法)ios_base::scientific(使用科学计数法)
    补充:C语言中printf()的说明符号,默认的C++模式相应于%g说明符,定点表示法相应于%f的说明符。而科学计数法相应于%e说明符
    区分下,三个计数法的差别
    默认模式:新式:浮点类型被显示为6位,精度指的是总位数,末尾的0不显示。
    定点表示法、科学计数法:精度指的是小数点后面的位数,而不是总位数。显示末尾0

    第二个參数
    ios_base::adjustfield
    对于第一个參数有三个: ios_base::left(左对齐) ios_base::right(右对齐)ios_base::internal (符号或基数前缀左对齐,值右对齐)
    补充:
    标准控制符

    cout << showpoint << fixed << right;
    

    iomanip头文件#include<iomanip>
    最经常使用的3个控制符:
    setprecision() 设置精度
    setfill() 填充字符
    setw() 字段宽度
    2、使用cin进行输入
    操作符函数原型

    istream & operator>> (int &);
    cin >> staff_size;
    

    cin
    1)输入一个数字
    2)接受一个字符串,遇到空格、TAB、回车都结束
    cin.get()
    1)cin.get(ch)用来接收字符

    char ch; cin.get(ch);
    

    2)cin.get(s,n)用来接收一行字符串。能够接收空格 这个类似于getline 能够输入多个单词用空格隔开

    char a[20]; cin.get(a,20);
    

    cin.getline()
    接受一个字符串,能够接收空格。这个和cin(s,n)都须要注意

    char m[20] = jklkjilj;
    cin.getline(m,5);
    cout << m << endl; //这里输出结果为jklk 由于最后一个字符为‘0’
    

    这就能够知道直接上cin.getline()有三个參数。接收字符串到m,接收个数,结束符(当省去的时候我们就默觉得''或者‘/n’)

    char a[20]; cin.getline(a,5);
    

    getline()
    接收一个字符串,能够接收空格并输出,须要包括头文件#include<string>
    注意。getline()属于string流。所以仅仅有把字符串定义为string型,我们才干够用,否则仅仅能用istream流的cin.getline(m,20)
    gets()
    接收一个字符串,能够接收空格并输出,可是须要加上头文件#include<string>
    并且须要注意不能写成m = gets();应该为gets(m)
    getchar()
    接收一个字符。须要有头文件#include<string>
    这几须要注意,不能写成getchar(ch);应该写成ch = getchar(); getchar()是C语言的函数。C++也兼容。可是少用。


    综上所述。依据我的习惯。C++以后碰到须要输入带空格的字符时用char ch; cin.get(ch)
    字符串#include<string> gets(str)
    补充:流是进出程序的字节流,缓冲区是内存中的暂时存储区域,是程序与文件或其它设备之间的桥梁

    <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<完结于2014.07.24 23:08


    版权声明:本文博客原创文章,博客,未经同意,不得转载。

  • 相关阅读:
    js炫酷效果
    程序员的执着
    [心得]docker学习笔记
    [心得笔记]多线程之间的内存可见性问题
    Docker入门
    [心得体会]jvm
    redis学习总结
    [心得]redis集群环境搭建的错误
    Linux安装mysql5.7版本
    Cent OS下安装JDK11
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/4625468.html
Copyright © 2011-2022 走看看