C++ IOS::setstate() 函式



C++ 的std::ios::setstate()函式用於修改輸入/輸出流的狀態。它設定流的內部狀態標誌,例如 badbit、failbit、eofbit,這些標誌指示各種錯誤情況,例如讀/寫錯誤、操作失敗或 EOF。此函式透過使程式能夠在執行 I/O 操作後檢查和響應流的狀態來幫助進行錯誤處理。

語法

以下是 std::ios::setstate() 函式的語法。

void setstate (iostate state);

引數

  • state − 一個 ios_base::iostate 型別的物件,其值可以是以下成員常量的任意組合。

iostate

(成員常量)

指示 用於檢查狀態標誌的函式
good() eof() fail() bad() rdstate()
goodbit 無錯誤(零值 iostate true false false false goodbit
eofbit 輸入操作到達檔案結尾 false true false false eofbit
failbitI/O 操作的邏輯錯誤 false false true false failbit
badbitI/O 操作的讀/寫錯誤 false false true true badbit

返回值

它不返回任何值。

異常

如果丟擲異常,則流處於有效狀態。如果結果錯誤狀態標誌不是 goodbit,並且為該狀態設定了成員異常 throw,則它會丟擲成員型別 failure 的異常。

資料競爭

修改流物件。

同時訪問同一個流物件可能會導致資料競爭。

示例

讓我們看下面的例子,我們將手動設定輸入流的 failbit 來模擬輸入失敗。

#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;
}

輸出

以上程式碼的輸出如下:

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

示例

考慮以下示例,我們將組合 failbit 和 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;
}

輸出

以下是以上程式碼的輸出:

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

示例

在下面的示例中,我們將清除 goodbit 來模擬流不再處於良好狀態。

#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;
}

輸出

如果我們執行以上程式碼,它將生成以下輸出:

First Read: 1213
Second Read: 1213
ios.htm
廣告
© . All rights reserved.