C++ iomanip 庫 - get_time 函式



描述

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

它用於從其應用到的輸入流中提取字元,並根據引數 fmt 中指定的格式將其解釋為時間和日期資訊。獲得的資料儲存在 tmb 指向的 struct tm 物件中。

宣告

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

template <class charT>
/*unspecified*/ get_time (struct tm* tmb, const charT* fmt);

引數

tmb - 指向 struct tm 型別物件的指標,其中儲存提取的時間和日期資訊。struct tm 是在標頭檔案 <ctime> 中定義的類。

fmt - time_get::get 用作格式字串的 C 字串(請參閱 time_get::get)。charT 是 C 字串中的字元型別。

返回值

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

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

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

異常

基本保證 - 如果丟擲異常,則物件處於有效狀態。

如果結果錯誤狀態標誌不是 goodbit 並且成員異常設定為對該狀態丟擲,則它會丟擲一個成員型別為 failure 的異常。

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

資料競爭

訪問 fmt 指向的陣列 修改 tmb 指向的物件以及從中提取的流物件。

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

示例

以下示例說明了 get_time 函式。

#include <iostream>     
#include <iomanip>      
#include <ctime>        

int main () {
   struct std::tm when;
   std::cout << "Please, enter the time: ";
   std::cin >> std::get_time(&when,"%R");   

   if (std::cin.fail()) std::cout << "Error reading time\n";
   else {
      std::cout << "The time entered is: ";
      std::cout << when.tm_hour << " hours and " << when.tm_min << " minutes\n";
   }
   return 0;
}
iomanip.htm
廣告