美文网首页
c++快速入门5:文件处理2格式化及异常处理

c++快速入门5:文件处理2格式化及异常处理

作者: python测试开发 | 来源:发表于2021-07-26 09:44 被阅读0次

    输入和输出

    输入和输出流的行为可以用cout和cin函数的 "插入运算符 "来修改。为它们的width()函数指定整数参数,可以设置流的字符宽度。如果内容没有填满整个流的宽度,可以指定一个填充字符作为其fill()函数的参数,以表示空的部分。同样,浮点数的默认精度为小数点后六位,可以通过为其 precision() 函数指定一个整数来改变。使用插入操作符来修改流的语句应该在使用<<或>>操作符的语句之前进行。

    插入操作符只修改流对象--随后的流对象使用默认值。


    manipulate.cpp

    #include <iostream>
    using namespace std ;
    
    int main()
    {
      bool isTrue = 1 ;
      int num = 255 ;
    
      // Insertion operators...
      cout.width(40) ;
      cout.fill( '.' ) ;
      cout << "Output" << endl ;
    
      // Uncomment the next line to confirm subsequent stream uses defaults.
      cout << "Output" << endl << endl ;
    
      // Precision, uncomment the next line for the default format.
      cout << "Pi: " << 3.1415926536 << endl ;
    
      cout.precision(11) ;
      cout << "Pi: " << 3.1415926536 << endl ;
    
      // Manipulators.
      cout << isTrue << ": " << boolalpha << isTrue << endl ;
      cout << num << ": " << hex << showbase << uppercase << num << endl ;
    
      return 0 ;
    }
    

    异常处理

    常见的三种类型的错误:

    • 语法错误
    • 逻辑错误--代码在语法上是正确的,但试图执行非法操作。比如除以0。
    • 异常错误 - 程序按预期运行,直到遇到特殊情况,使程序崩溃。例如,程序可能要求输入一个数字,而用户是字母而不是数字。

    更多参考:https://www.geeksforgeeks.org/errors-in-cc/

    编译器能发现"编译时 "错误,但例外错误的可能性更难定位,因为它们只发生在 "运行时"。这意味着程序员必须尝试预测可能出现的问题,并准备处理这些特殊错误。

    当异常错误发生时,try会将异常 "抛出 "到紧随尝试块之后的 "捕捉 "块。这就使用了catch关键字,并将处理异常错误的语句包围在一对大括号内。

    try.cpp

    #include <iostream>
    using namespace std ;
    
    int main()
    {
      int number;
    
      try
      {
        for( number = 1 ; number < 21 ; number++ )
        {
          if (number > 4 ) throw( number ) ;
          else
          cout << "Number: " << number << endl ;
        }
      }
      catch( int num )
      {
        cout << "Exception at: " << num << endl ;
      }
    
      return 0 ;
    }
    

    识别异常

    异常引用被传递到catch块中,就可以通过异常的what()函数检索到错误描述。

    what.cpp

    #include <string>
    #include <iostream>
    using namespace std ;
    
    int main()
    {
      string str = "C++" ;
    
      try
      {
        str.erase( 4 , 6) ;
      }
      catch( exception &error )
      {
        cerr << "Exception: " << error.what() << endl ;
      }
    
      return 0 ;
    }
    

    cout函数将数据发送到标准输出,而cerr函数将错误数据发送到标准错误输出。这只是两个不同的数据流。添加#include <stdexcept>预处理器指令,异常类可以被用来识别抛向捕获块的异常类型。

    处理错误

    except.cpp

    i#include <stdexcept>
    #include <fstream>
    #include <string>
    #include <iostream>
    
    #include <typeinfo>
    
    using namespace std;
    
    int main()
    {
      string lang =  "C++" ;
      int num = 1000000000; // One billion.
    
      try
      {
        lang.replace( 100, 1, "C" ) ; // 1. out_of_range exception
    
        //lang.resize( 3 * num ); // 2. length error
    
        //ifstream reader( "nonsuch.txt" ) ;
        //if( ! reader ) throw logic_error("File not found" ); // 3. logic_error
      }
      catch( out_of_range &e )
      {
        cerr << "Range Exception: " << e.what() << endl ;
        cerr << "Exception Type: " << typeid( e ).name() ;
        cout << endl << "Program terminated." << endl ;
        return -1 ;
      }
      catch( exception &e )
      {
        cerr << "Exception: " << e.what() << endl ;
        cerr << "Exception Type: " << typeid( e ).name() << endl ;
      }
      
      cout << "Program continues..." << endl ;
    
      return 0 ;
    }
    

    相关文章

      网友评论

          本文标题:c++快速入门5:文件处理2格式化及异常处理

          本文链接:https://www.haomeiwen.com/subject/dbwbmltx.html