• C++(四十六) — 异常处理机制、标准IO输入输出


    1、异常处理机制

      一般来说,异常处理就是在程序运行时对异常进行检测和控制。而在C++ 中,使用 try-throw-catch模式进行异常处理的机制。

    #include<iostream>
    using namespace std;
    
    int Fib(int n)
    {
        if (n <= 0)
            throw n;
        if (n >= 47)
            throw "n>=47 overflow";
        if (n == 1 || n == 2)
            return 1;
        else
            return Fib(n - 1) + Fib(n - 2);
    }
    
    void main()
    {
        int n, fn;
        try
        {
            cin >> n;
            cout << Fib(n) << endl;
        }
        catch (int m)
        {
            cout << "运行D异常,n=" << m << endl;
        }
        catch (char *s)
        {
            cout << s << endl;
        }
        system("pause");
    }

      注意:

      (1)C++中,异常的引发和处理不在一个函数中,上层可以根据不同类型的异常进行处理;按照栈模型处理,一层层传递;

      (2)如果 接受异常的时候,使用一个异常变量,则copy 构造异常变量;

      (3)使用 引用的话,会使用 throw 时候的那个对象;

      (4)指针可以和引用、元素写在一起,但是 引用 和 元素 不能写在一起;

      (5)类对象时,使用引用比较合适。

     2、标准IO输入输出关系图

      iostream 是输入/输出流类,由 istream、ostream 两个基类共同派生出来。

     

     3、标准输入流对象

     (1)cin.ignore(2); //忽略两个字符位置

    #include<iostream>
    using namespace std;
    
    //标准输入流对象 cin
    
    void main()
    {
        /*
        // 输入遇到 空格 即停止接受数据,
        char mybuf[1024];
        int myInt;
        */
    
        // 读取数据时包含 空格
        char ch,a,b,c;
        while ((ch = cin.get()) != EOF)//ctrl+z 结束
        {
            cout << ch << endl;
        }
    
        cin.get(a);// 只读取缓冲区的第一个字符
        cin.get(b);
        cin.get(a).get(b);//因为返回的是引用,所以可以链式编程
    
        // getline():可以从输入流中读取多个字符,可以指定输入终止字符(默认是换行符),
        // 读取完成后,从读取的内容中删除该终止符。
        //输入:aa bb cc dd
        //输出:buf1:aa   ,buf2: bb cc dd
        char buf1[256], buf2[256];
        cin >> buf1;//只保存第一个,遇到空格即停止
        cin.getline(buf2, 256);//保存空格,遇到 换行符 即停止。
    
        system("pause");
    }

    4、标准输出流对象

    1. cout:标准输出,缓冲区满时被输出;
    2. cerr:标准错误输出,没有缓冲,发送给他的内容立即被输出;
    3. clog:类似于 cerr, 但是有缓冲,缓冲区满时被输出;

      使用成员函数或者操作符设置输出格式,操作符在标准头文件 iomanip 中定义。

    1. cout.put('h').put('e') << endl;:输出单个字符;
    2. char *p = "hello";

      cout << *p << endl;//只输出第一个字符

      cout.write(p, strlen(p)) << endl;   //对于指针内容的输出,可以控制输出内容的大小
      cout.write(p, strlen(p)-2) << endl;

    3. stefill('*')、fill('*'):设置填充字符为 *;
    4. setw(n) 、width(n):设置输出宽度
    5. setprecision(n) 、precision(n):显示小数精度为 n 位
    6. left 、right:左对齐、右对齐
    7. dec、 hex 、oct:十进制、十六进制、八进制
  • 相关阅读:
    gitlab pipeline optimize 效率优化
    gitlab pipeline 构建容器镜像方法
    软件学习目录索引
    面试题收集
    【docker】4种网络模式
    GeoIP库商业版调研支持IPV6
    MySQL在线开启GTID模式
    Linux IO分析
    一个宝藏级微服务开源项目,是真的牛批!
    powerdesigner 如何设置name和code不自动同步
  • 原文地址:https://www.cnblogs.com/eilearn/p/10988635.html
Copyright © 2020-2023  润新知