C++ IOS::setstate() function



The C++ std::ios::setstate() function is used to modify the state of an input/output stream. It sets the stream's internal state flags, such as badbit, failbit, eofbit indicating various error conditions like read/write errors, operation failures, or EOF. This function helps in error handling by enabling the program to check and respond to the stream's state after performing I/O operations.

Syntax

Following is the syntax for std::ios::setstate() function.

void setstate (iostate state);

Parameters

  • state − An object of type ios_base::iostate that can take as value any combination of the following member constants.

iostate value

(member constant)

indicates functions to check state flags
good() eof() fail() bad() rdstate()
goodbit No errors (zero value iostate) true false false false goodbit
eofbit End-of-File reached on input operation false true false false eofbit
failbit Logical error on i/o operation false false true false failbit
badbit Read/writing error on i/o operation false false true true badbit

Return Value

It does not return anything.

Exceptions

If an exception is thrown, the stream is in a valid state. It throws an exception of member type failure if the resulting error state flag is not goodbit and member exceptions was set throw for that state.

Data Races

Modifies the stream object.

Concurrent access to the same stream object may cause data races.

Example

Let's look at the following example, where we are going to manually set the failbit of an input stream to simulate an input failure.

#include <iostream>
#include <sstream>
int main()
{
    std::istringstream a("112 ABC");
    int x;
    a >> x;
    std::cout << "First Read: " << x << std::endl;
    a.setstate(std::ios::failbit);
    a >> x;
    if (a.fail()) {
        std::cout << "Second Read Failed Due Do setstate()" << std::endl;
    }
    return 0;
}

Output

Output of the above code is as follows −

First Read: 112
Second Read Failed Due Do setstate()

Example

Consider the following example, where we are going to combine both failbit and eofbit.

#include <iostream>
#include <sstream>
int main()
{
    std::istringstream a("112");
    int x;
    a >> x;
    std::cout << "First Read: " << x << std::endl;
    a.setstate(std::ios::failbit | std::ios::eofbit);
    a >> x;
    if (a.fail() && a.eof()) {
        std::cout << "Second Read Failed Due To setstate() With eofbit." << std::endl;
    }
    return 0;
}

Output

Following is the output of the above code −

First Read: 112
Second Read Failed Due To setstate() With eofbit.

Example

In the following example, we are going to clear the goodbit to simulate that the stream is no longer in a good state.

#include <iostream>
#include <sstream>
int main()
{
    std::istringstream x("1213");
    int a;
    x >> a;
    std::cout << "First Read: " << a << std::endl;
    x.setstate(std::ios::goodbit);
    x >> a;
    std::cout << "Second Read: " << a << std::endl;
    return 0;
}

Output

If we run the above code it will generate the following output −

First Read: 1213
Second Read: 1213
ios.htm
Advertisements