classes/ftest5b.cpp

The following code example is taken from the book
Object-Oriented Programming in C++
by Nicolai M. Josuttis, Wiley, 2002
© Copyright Nicolai M. Josuttis 2002


while (! (std::cin >> x)) {
    char c;

    if (std::cin.bad()) {
        // fatal input error: exit program
        std::cerr << "fatal error during intput of fraction"
                  << std::endl;
        std::exit(EXIT_FAILURE);
    }
    if (std::cin.eof()) {
        // end of file: exit program
        std::cerr << "EOF with input of fraction" << std::endl;
        std::exit(EXIT_FAILURE);
    }
    /* non-fatal error:
     * - reset failbit
     * - read everything up to the end of the line and try again (loops!)
     */
    std::cin.clear();
    while (std::cin.get(c) && c != '\n') {
    }
    std::cerr << "Error during input of fraction, try again: "
              << std::endl;
}