sum1.cpp

来自「stl自带源码」· C++ 代码 · 共 86 行

CPP
86
字号
/* The following code example is taken from the book * "The C++ Standard Library - A Tutorial and Reference" * by Nicolai M. Josuttis, Addison-Wesley, 1999 * * (C) Copyright Nicolai M. Josuttis 1999. * Permission to copy, use, modify, sell and distribute this software * is granted provided this copyright notice appears in all copies. * This software is provided "as is" without express or implied * warranty, and with no claim as to its suitability for any purpose. */#include <iostream>#include <cstdlib>namespace MyLib {    double readAndProcessSum (std::istream&);}int main(){    using namespace std;    double sum;    try {        sum = MyLib::readAndProcessSum(cin);    }    catch (const ios::failure& error) {        cerr << "I/O exception: " << error.what() << endl;        return EXIT_FAILURE;    }    catch (const exception& error) {        cerr << "standard exception: " << error.what() << endl;        return EXIT_FAILURE;    }    catch (...) {        cerr << "unknown exception" << endl;        return EXIT_FAILURE;    }    // print sum    cout << "sum: " << sum << endl;}#include <istream>namespace MyLib {    double readAndProcessSum (std::istream& strm)    {        using std::ios;        double value, sum;            // save current state of exception flags        ios::iostate oldExceptions = strm.exceptions();            /* let failbit and badbit throw exceptions         * - NOTE: failbit is also set at end-of-file         */        strm.exceptions (ios::failbit | ios::badbit);            try {            /* while stream is OK             * - read value and add it to sum             */            sum = 0;            while (strm >> value) {                sum += value;            }        }        catch (...) {            /* if exception not caused by end-of-file             * - restore old state of exception flags             * - rethrow exception             */            if (!strm.eof()) {                strm.exceptions(oldExceptions);  // restore exception flags                throw;                           // rethrow            }        }            // restore old state of exception flags        strm.exceptions (oldExceptions);            // return sum        return sum;    }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?