zoukankan      html  css  js  c++  java
  • C++输入与输出

    1 概述

      C和C++都没有将输入和输出建立在语言中,C++将输入输出的解决方案放在类库中(由头文件iostream和fstream中定义的类)

      C++程序把输入和输出看作字节流。流充当了程序和流源流目标之间的桥梁。

      C++输入输出类的派生关系:ios_base -> ios -> istream/ostream -> iostream

      cin和cout是对象

    2 cout

    2.1 <<插入操作符

      使用插入操作符可以有一下3种方法:1.一个cout接受的类型(int char long(包括signed/unsigned)float double long double),包括数值/变量/解除引用的指针/数组;2.char数组名或char的指针(必须是char */signed char */unsigned char*而不能是其他类型)3.引号引起的字符串

    1     int i = 999;
    2     int *p = &i;
    3     cout<<*p<<"  "<<p<<endl;
    4     char *a = "hellow";
    5     cout<<*a<<"  "<<a<<endl;
    6     char name[10] = "world";
    7     cout<<name<<endl;

      输出结果:

      也就是说对于非char类型的指针,必须是cout<<*p,否则cout<<p只是输出p的地址;而char类型的指针,cout<<*p相当于输出p[0],是cout<<p输出p指向字符串的全部内容,原因是cout<<原型中为char类型提供了单独的char指针类型,charl类型的字符串数组也是类似。总而言之对非char类型的指针或数组名正常处理,对于char类型的指针或数组名直接当作内容处理

    2.2 拼接输出

      <<插入操作符可以拼接,方法也可以拼接,如cout.pur('I').put('T')

    2.3 cout.put();cout.write()

      put输出字符,接收一个char类型的参数,或者将数值参数转化为char值

      write输出字符串,接收两个参数,原型为:

    1 basic_ostream<charT,traints>& write(const char_type* s, streamsize n);

      write遇到空字符时不会停止,即使超出边界,write仍继续打印

        cout.put('A')<<endl;
        cout.put('A' + 0x20)<<endl;
        cout.put(65)<<endl;
        char *name = "hellow";
        char *name1 = "world";
        cout.write(name,12)<<endl;

    2.4 cout格式化值

      对于char,数值整型,字符串显示在与其宽度相对应的字段中,对于浮点数,显示为6位(如果够6位),不够的末尾的0也不显示,当指数>=6或<=-5时以科学计数法显示,否则以定点表示法显示

    1     float i = 1.2;
    2     float j = 1.23456789;
    3     float m = 123456789;   //默认精读是6位
    4     float n = 123456.789;
    5     cout<<i<<endl;
    6     cout<<j<<endl;
    7     cout<<m<<endl;
    8     cout<<n<<endl;
    9     cout<<(n * 1e3)<<endl;

      最后一行相当于1乘以10的3次方,此时指数大于6,用科学计数法表示

      输出十进制:cout<<dec;八进制:cout<<oct;十六进制:cout<<hex    作用域,永久有效直到将格式状态改变为止。

    2.5 cout.width();cout.fill();cout.precision()

      width()方法有两种原型:

      int width();         //返回字符宽度的当前设置

      int width(int i);   //设置宽度为i,并返回以前的字符宽度

      注意:width方法只影响接下来显示的一个项目,然后将字段宽度恢复为默认值;C++永远不会截短数据,当宽度不够会增加宽度,显示所有数据比保持列整洁更为重要

    1     int w = cout.width(30);  
    2     cout << "default field width = " << w << ":
    "; 
    3     for(int i = 1;i <= 10;i++)
    4     {
    5         cout<<"";
    6         cout.width(i);
    7         cout<<i<<endl;
    8     } 

      由于width()返回以前的宽度,故返回默认的宽度为0,程序表明width()只影响接下来被显示的一个项目

      默认情况下用空格填充字段中未被使用的部分,可以用fill()方法来修改填充,比如用*填充写作cout.fill('*'),其作用域一直持续直到更改为止

      cout.precision()为设置精度的方法,在默认情况下精度是指的总位数,在定点模式(fixed)和科学模式下精度是指小数点后面的位数,作用域也是一直有效,默认情况下精度是6位

    1     cout.precision(5);
    2     float i = 1.2345678;
    3     cout<<i<<endl;
    4     cout<<fixed<<i<<endl; 

    2.6 cout.setf();cout.setf()以及C++的标准控制符

      这类函数可以控制多种格式化特性,前者是用来设置格式,后者用来消除格式,比如:cout.setf(hios_base::showpoint),用来显示末尾小数点,但是这样用比较繁琐,所以C++提供了多个控制符,能够调用setf()

      标准控制符直接在插入操作符后面使用,一些常见的标准控制符:

      cout<<showbase;  cout<<noshowbase;  对于输出使用/不使用C++前缀

      cout<<showpoint; cout<<noshowpoint;  显示/不显示末尾小数点

      cout<<showpos;  cout<<unshowpos;        对于正数,显示/不显示 +

      cout<<left; cout<<right;                           左对齐/右对齐

      cout<<dec; cout<<oct; cout<<hex;           输出十进制/八进制/十六进制

      cout<<fixed; cout<<scientific;                   使用定点/科学计数法

    2.7 iomanip头文件

      主要提供三个函数:setprecision();  设置精度

               setfill();      填充字符

               setw();       设置宽度

      比较方便的是可以与cout语句拼接起来

    3 cin

    3.1 >>抽取操作符

      cin>>______ 空格必须是cin接受的类型(int char long(包括signed/unsigned)float double long double),可以是变量,引用,被解除引用的指针,也可以是类或结构体成员

      同cout一样也单独针对char类型的指针和数组做出单独的重载,可以直接使用数组名或指针,而对于非char类型的指针则必须要解除引用

    1     int a;
    2     int *p = &a;
    3     cin>>*p;
    4     cout<<*p<<endl;
    5     char name[10];
    6     cin>>name;
    7     cout<<name<<endl;

    3.2 cin>>检查输入

      读取从非空白字符开始,到与目标类型不匹配的第一个字符之间的全部内容。输入与预期格式不匹配将导致cin>>结果为false

      输入结束条件  :到与目标类型不匹配的第一个字符(比如Enter、Space、Tab键)

      对结束符的处理 :丢弃缓冲区中使得输入结束的结束符(Enter、Space、Tab)

    3.3 cin.get(); cin.getline();

      cin.get(); cin.getline() 都提供不跳过空白的输入

      cin.get()常用的有三种原型:cin.get(),  cin.get(char ),  cin.get(char *, int)

      单字符输入可以用前两种,ch=cin.get() 与 cin.get(ch)是等价的,输入并显示一段带空格的字符串

    1     char ch;
    2     while( (ch = cin.get()) != '
    ')
    3         cout<<ch;

      字符串出入可以用cin.get(char *, int)或是cin.getline(char *, int)

      输入结束条件  :读取到指定数目字符或换行符时停止读取

      对结束符的处理 :get()将换行符留在输入流中,这样接下来的输入操作首先看到的书换行符,而getline()抽取并丢弃输入流中的换行符,用get()读取字符串时可以用一个cin.get()处理留在输入流中的换行符

    1     cin.get(array1,10);
    2     cin.get();
    3     cin.get(array2,10);

      cin.get(array_name, Arsize)当输入的字符串超长时,不会引起cin函数的错误,后面的cin操作会继续执行,只是直接从缓冲区中取数据。但是cin.getline()当输入超长时,会引起cin函数的错误,后面的cin操作将不再执行

    3.4 cin.peek()

      返回输入中的下一个字符,但不抽取输入流中的字符,也就是仅查看,不抽取。比如屏蔽空格

    1 while( cin.peek() == ' ' )
    2     cin.get();

    3.5 cin.ignore();cin.read();cin.gcount();

      cin.ignore(),接收两个参数,比如:cin.ignore(200,' ')读取并丢弃输入流中的200个字符或是到达第一个换行符为止

      cin.read(),接收两个参数,读取指定数目的字节,并将它们存储在指定的位置中,char gross[144]  cin.read(gross,144),一般与cout.write()一起用

      cin.gcount(),返回最后一个非格式化抽取方法读取的字符数,意味着由get(),getline(),ignore(),read()方法读取的字符会被统计,而不是>>

    1     cout<<"输入一段字符:";
    2     cin.ignore(5,'
    ');
    3     char num[20];
    4     cin.read(num,10);
    5     cout<<"抽取的字符数:"<<cin.gcount()<<endl;
    6     cout.write(num,10)<<endl;

  • 相关阅读:
    HTML 相关面试题
    h5简写时钟效果
    软件工程结对作业二
    软件工程结对作业一
    软件工程第三次作业
    软件工程第二次作业
    软件工程第一次作业
    软件工程第四次作业
    软件工程第三次作业
    2019软件工程第二次作业(VS2017中对C++的单元测试)
  • 原文地址:https://www.cnblogs.com/raichen/p/4167976.html
Copyright © 2011-2022 走看看