C++ iomanip 庫 - get_money 函式



描述

此函式首先構造一個 basic_istream::sentry 型別的物件(將 noskipws 設定為 false)來訪問輸入序列。然後(如果計算哨兵物件為真),它呼叫 money_get::get(使用流的選定區域設定)來執行提取和解析操作,並相應地調整流的內部狀態標誌。最後,它在返回之前銷燬哨兵物件。

它用於從其應用到的輸入流中提取字元,並將它們解釋為貨幣表示式,該表示式儲存為 mon 的值。

宣告

以下是 std::get_money 函式的宣告。

template <class moneyT>
/*unspecified*/ get_money (moneyT& mon, bool intl = false);

引數

mon − 儲存貨幣值的 物件。moneyT 應為 long double 或 basic_string 例項。

intl − 國際表示為 true,否則為 false。這在內部用於例項化正確的 moneypunct 類。

返回值

未指定。此函式僅應作為流運算子使用。

錯誤透過修改流的內部狀態標誌來發出訊號 -

標誌 錯誤
eofbit 輸入序列沒有更多可用的字元(已到達檔案末尾)。
failbit 要麼沒有提取字元,要麼提取的字元無法解釋為有效的貨幣值。
badbit 流錯誤(例如,當此函式捕獲內部操作丟擲的異常時)。設定後,流的完整性可能已受影響。

異常

基本保證 - 如果丟擲異常,則物件處於有效狀態。如果結果錯誤狀態標誌不是 goodbit 且成員異常被設定為對該狀態丟擲,則它會丟擲一個成員型別為 failure 的異常。

內部操作丟擲的任何異常都會被函式捕獲並處理,並設定 badbit。如果在上次呼叫 exceptions 時設定了 badbit,則該函式會重新丟擲捕獲的異常。

資料競爭

修改 mon 和從中提取它的流物件。

對同一流物件的併發訪問可能會導致資料競爭,除了當這些流物件與 stdio 同步時標準流物件 cin 和 wcin(在這種情況下,不會啟動任何資料競爭,儘管沒有保證提取的字元分配給執行緒的順序)。

示例

以下示例說明了 get_money 函式。

#include <iostream>     
#include <iomanip>      

int main () {
   long double price;
   std::cout << "Please, enter the price: ";
   std::cin >> std::get_money(price);

   if (std::cin.fail()) std::cout << "Error reading price\n";
   else std::cout << "The price entered is: " << price << '\n';

   return 0;
}

讓我們編譯並執行上述程式,這將產生以下結果 -

Please, enter the price: 50
The price entered is: 50
iomanip.htm
廣告