zoukankan      html  css  js  c++  java
  • C++基本输入/输出

     1.输入/输出流(I/O流)

    在C++中定义了通过输入/输出流(I/O流)的方法进行输入输出操作。在I/O流中,输入操作是通过cin 来实现的,而输出操作是通过cout来实现的。cin 和cout都是在头文件iostream中定义的,所以在程序中首先要包含输入/输出流的头文件,即#include<iostream>。

     cout语句的一般格式为:
        cout<<表达式1<<表达式2<<……<<表达式n;
    cin语句的一般格式为:
        cin>>变量1>>变量2>>……>>变量n;

    在定义流对象时,系统会在内存中开辟一段缓冲区,用来暂存输入输出流的数据。在执行cout语句时,先把插入的数据顺序存放在输出缓冲区中,直到输出缓冲区满或遇到cout语句中的endl(或' ',ends,flush)为止,此时将缓冲区中已有的数据一起输出,并清空缓冲区。输出流中的数据在系统默认的设备(一般为显示器)输出。

    一个cout语句可以分写成若干行。如
       cout<<"a+b=c"<<endl;
    可以写成
       cout<<"a+b= "  //注意行末尾无分号
       <<"c "
       <<endl; //语句最后有分号
    均输出:a+b=c
    注意 不能用一个插入运算符“<<”插入多个输出项,如:
        cout<<a,b,c; //错误,不能一次插入多项
        cout<<a+b+c; //正确,这是一个表达式,作为一项
    在用cout输出时,用户不必通知计算机按何种类型输出,系统会自动判别输出数据的类型,使输出的数据按相应的类型输出。如已定义a为int型,b为float型,c为char型,则
        cout<<a<<' '<<b<<' '<<c<<endl;
    会以下面的形式输出:
    4 345.789 a
    与cout类似,一个cin语句可以分写成若干行。如
        cin>>a>>b>>c>>d;
    可以写成
       cin>>a //注意行末尾无分号
       >>b //这样写可能看起来清晰些
       >>c
       >>d;
    均可以从键盘输入: 1  2  3  4 ↙

    在用cin输入时,系统也会根据变量的类型从输入流中提取相应长度的字节。如有
       char c1,c2;
       int a;
       float b;
       cin>>c1>>c2>>a>>b;
    注意: 不能用cin语句把空格字符和回车换行符作为字符输入给字符变量,它们将被跳过。如果想将空格字符或回车换行符(或任何其他键盘上的字符)输入给字符变量,可以用getchar函数。
    在组织输入流数据时,要仔细分析cin语句中变量的类型,按照相应的格式输入,否则容易出错。

    关于endl的用法

    在c++中,终端输出换行时,用cout<<......<<endl与 “ ”都可以,这是初级的认识。但二者有小小的区别,用endl时会刷新缓冲区,使得栈中的东西刷新一次,但用“ ”不会刷新,它只会换行,栈内数据没有变化。

    cout << endl;除了往输出流中插入一个' ',还有刷新输出流的作用。

    cout <<endl; 等价于: cout<< ' ' << flush;

    2. 在输入流与输出流中使用控制符

    I/O流的常用控制符

      需要注意的是:如果使用了控制符,在程序单位的开头除了要加iostream头文件外,还要加iomanip头文件。

    以下通过例子进行说明:

    【实例一】

    #include<iostream>
    using namespace std;
    #include<iomanip>
    int main() {
        int i, j;
        cout << "please input two numbers:";
        cin >> i >> j;
        cout << i << j<<endl;
        cout << setw(10) << i << setw(10) << j << endl;
        
        system("pause");
         return 0;
    }

     在该例中,第一个cout没有指定的宽度,而第二个cout中由于setw(10)指明i和j输出时占用字符的宽度为10,前面有8个空格。

    如果将例子中cout << setw(10) << i << setw(10) << j << endl;改为如下

    cout <<setfill('*')<< setw(10) << i << setw(10) << j << endl;

    其输出结果为如图

    【实例二】

    include<iostream>
    #include<iomanip>
    using namespace std;
    
    int main() {
        const double  pi = 3.14159;
        double r = 6.779, c, s;
        c = 2.0*pi*r;//计算周长
        s = pi * r*r;//计算面积
        cout << "r的值" << r << endl;
        
        cout << "圆的周长(指数形式)" << setiosflags(ios::scientific) << c << endl;
        cout << "圆的面积(指数形式)" <<s<< endl;
        cout << "圆的周长(小数形式)" << dec << setiosflags(ios::fixed) << c << endl;
        cout << "圆的面积(小数形式)" << dec << setiosflags(ios::fixed) << s << endl;
        
        system("pause");
         return 0;
    }

    【实例三】

    #include <iostream>
    #include <iomanip> 
    using namespace std;
    
    void testdouble()
    {
        double d1 = 12.345678901234567;
        cout << d1 << endl;
    }
    
    int main()
    {
        cout << "123456的十进制位:" << dec << 123456 << ",八进制为:" << oct << 123456 << ",十六进制为:" << hex << 123456 << 'n' << endl;
        //dec:返回数值的十进制,oct返回是指的八进制,hex返回数值的十六进制。
        cout << dec; //恢复为十进制格式
        cout << setfill('*') << setw(10) << setiosflags(ios::left) << 123456 << 'n' << endl; //setfill(c):设置字符填充,c可以是字符常或字符变量,只对本行有用。
        // setw(n):设置字段宽度为n位,如果n小于所要返回的字符的宽度则保留字符原样输出,只对
        //setiosflags(ios::left):左对齐,setiosflags(ios::right):右对齐
    
        cout << resetiosflags(ios::left); //终止已设置的输入输出流格式,本例去掉左对齐方式
    
        double d = 12.345678901234567;
    
        testdouble(); //之前没有使用输入输出流控制符,d1默认格式输出(精度为6)
        cout << setprecision(16) << d << endl; //设置浮点数的精度,n为有效数字,采用四则五入法舍位,setprecision(n)中,n小于等于16有效。
        testdouble(); //之前使用了setprecision(),此函数保留前面的宽度设置。
    
        cout << setiosflags(ios::fixed) << setprecision(17) << d << endl;
        //setiosflags(ios::fixed):设置浮点数以固定的小数位数显示,8为8位小数,所指定的小数位如果大于小数本身小数位则补0。
    
        cout << resetiosflags(ios::fixed);
    
        cout << setiosflags(ios::scientific) << setiosflags(ios::uppercase) << setprecision(4) << d << 'n' << endl;
        // setiosflags(ios::scietific):用科学计数法表示,4为指定小数位分为四位,且第四位四舍五入。
        //setiosflags(ios::uppercase) : 在以科学计数法输出E与十六进制输出X以大写输出,否则小写。
        system("pause");
        return 0;
    }

     3. 六个输入函数用法

    学C++的时候,这几个输入函数弄的有点迷糊;这里做个小结,为了自己复习,也希望对后来者能有所帮助,如果有差错的地方还请各位多多指教(本文所有程序均通过VS2017运行)

    1.       cin

    2.       cin.get()

    3.       cin.getline()

    4.       getline()

    5.       gets()

    6.       getchar()

    3.1  cin>>   

     不做过多的说明,在文章开始已经有相关的解说。

    3.2cin.get()

    用法1: cin.get(字符变量名)可以用来接收字符

    #include <iostream>
    using namespace std;
    int main()
    
    {
    
        char a;
    
        a = cin.get();               //或者cin.get(ch);
    
        cout << a << endl;
    
        system("pause");
        return 0;
    }

    用法2:cin.get(字符数组名,接收字符数目)用来接收一行字符串,可以接收空格

    #include <iostream>
    using namespace std;
    int main()
    
    {
    
        char a[10];
    
        cin.get(a,20);               //或者cin.get(ch);
    
        cout << a << endl;
    
        system("pause");
        return 0;
    }

     用法3:cin.get(无参数)没有参数主要是用于舍弃输入流中的不需要的字符,或者舍弃回车,弥补cin.get(字符数组名,接收字符数目)的不足

    #include <iostream>
    using namespace std;
    int main()
    
    {
    
        char a;
    
        cin.get();               //或者cin.get(ch);
        cin >> a;
        cout << a << endl;
    
        system("pause");
        return 0;
    }

    3.3  cin.getline() 

    接受一个字符串,可以接收空格并输出

    #include <iostream>
    using namespace std;
    int main()
    
    {
        char m[20];
    
        cin.getline(m, 5);
    
        cout << m << endl;
    
    
        
    
        system("pause");
        return 0;
    }

    接受5个字符到m中,其中最后一个为'',所以只看到4个字符输出;

    当用在多维数组中的时候,也可以用cin.getline(m[i],20)之类的用法:

    #include <iostream>
    using namespace std;
    int main()
    
    {
        char m[3][20];
    
        for (int i = 0; i < 3; i++)
    
        {
    
            cout << "
    请输入第" << i + 1 << "个字符串:" << endl;
    
            cin.getline(m[i], 20);
    
        }
    
        cout << endl;
    
        for (int j = 0; j < 3; j++)
    
            cout << "输出m[" << j << "]的值:" << m[j] << endl;
        system("pause");
        return 0;
    }

    3.4  getline()

    接受一个字符串,可以接收空格并输出,需包含“#include<string>”

    #include <iostream>
    #include
    <string> using namespace std; int main() { string str; getline(cin, str); cout << str << endl; system("pause"); return 0; }

     和cin.getline()类似,但是cin.getline()属于istream流,而getline()属于string流,是不一样的两个函数

    3.5  gets()

    在VS新标准中,应该是用gets_s代替gets

     接受一个字符串,可以接收空格并输出,需包含“#include<string>”

    #include <iostream>
    #include<string>
    using namespace std;
    int main()
    
    {
        char m[20];
    
        gets_s(m);                      //不能写成m=gets_s();
    
        cout << m << endl;
    
    
        
        system("pause");
        return 0;
    }

    类似cin.getline()里面的一个例子,gets()同样可以用在多维数组里面:

    #include <iostream>
    #include<string>
    using namespace std;
    int main()
    
    {
        char m[3][20];
    
        for (int i = 0; i < 3; i++)
    
        {
    
            cout << "
    请输入第" << i + 1 << "个字符串:" << endl;
    
            gets_s(m[i]);
    
        }
    
        cout << endl;
    
        for (int j = 0; j < 3; j++)
    
            cout << "输出m[" << j << "]的值:" << m[j] << endl;
          system("pause");
        return 0;
    }

    自我感觉gets()和cin.getline()的用法很类似,只不过cin.getline()多一个参数罢了;cin.getline()和gets()均可以接收空格

     3.6  getchar()  

    接受一个字符,需包含“#include<string>”

    #include <iostream>
    #include<string>
    using namespace std;
    int main()
    
    {
        char ch;
    
        ch = getchar();                       //不能写成getchar(ch);
    
        cout << ch << endl;
       system("pause");
        return 0;
    }

    getchar()是C语言的函数,C++也可以兼容,但是尽量不用或少用;

  • 相关阅读:
    Python开发入门与实战16-APACHE部署
    Python开发入门与实战15-IIS部署
    Python开发入门与实战14-基于Extjs的界面
    团队作业4:第三篇Scrum冲刺博客(歪瑞古德小队)
    团队作业4:第二篇Scrum冲刺博客(歪瑞古德小队)
    团队作业4:第一篇Scrum冲刺博客(歪瑞古德小队)
    团队作业4:项目冲刺集合贴(歪瑞古德小队)
    团队作业3:需求改进&系统设计(歪瑞古德小队)
    团队作业2:需求规格说明书(歪瑞古德小队)
    使用docker安装codimd,搭建你自己的在线协作markdown编辑器
  • 原文地址:https://www.cnblogs.com/CX66/p/13771649.html
Copyright © 2011-2022 走看看