格式規格欄位: scanfwscanf 函式

此處的資訊適用于整個 scanf 函式系列,包括安全版本。 它會描述用來告訴 scanf 函式如何將輸入資料流程,例如輸入資料流程 stdin 剖析成插入程式變數的值中的符號。

format 變數是一個字串,指定輸入的解譯,而且可以包含一或多個:

  • 空白字元:空白( ;定位字元) \t 或分行符號( \n )。 空白字元會使得 scanf 讀取 (但不儲存) 輸入中的所有連續空格字元,一直到下一個非空白字元。 格式中一個空格字元會比對輸入中任何數字 (包括 0) 和空白字元的組合。

  • 不含百分比符號 (%) 的非空白字元。 非空白字元會使得 scanf 讀取 (但不儲存) 符合的非空白字元。 如果輸入資料流程中的下一個字元不相符,則會 scanf 終止。

  • 格式規格,由百分比符號 (%) 引入。 格式規格會使 scanf 輸入中的字元讀取和轉換成指定類型的值。 值會指派給引數清單中的引數。

    格式規格的格式如下︰

    %[*][width][{h|l|ll|I64|L}]type

    在這裡,、 widthhlllI64L 代表 scanf 寬度規格 ,並 type 代表 scanf 類型欄位字元

format 變數字串會從左至右讀取。 格式規格以外的字元應該符合輸入資料流程中的字元序列。 會掃描輸入資料流程中的相符字元,但不會儲存。 如果輸入資料流程中的字元與格式規格衝突, scanf 則會終止字元,而且字元會留在輸入資料流程中,就好像尚未讀取一樣。

遇到第一個格式規格時,會根據此規格轉換第一個輸入欄位的值。 這個值會儲存在引數後面的 format 第一個引數所指定的位置。 第二個格式規格會導致第二個輸入欄位透過格式字串的結尾轉換並儲存在下一個引數中,依此儲存。

輸入欄位定義為:所有字元最多到第一個空白字元(空格、定位字元或分行符號),或直到無法根據格式規格轉換的第一個字元,或直到達到欄位寬度(如果指定的話) 為止。 如果指定的規格有太多引數,額外的引數會予以評估但忽略。 如果格式規格沒有足夠的引數,則結果無法預測。

每個格式規格的欄位都是單一字元,或表示特定格式選項的數字。 type 字元出現在最後一個選擇性格式欄位之後,決定將輸入欄位解譯為字元、字串或數字。

最簡單的格式規格只包含百分比符號和一個 type 字元 (例如 %s)。 如果百分比符號 ( % ) 後面接著沒有意義的字元做為格式控制字元,該字元和下列字元(最多下一個百分比符號)會被視為一般字元序列。 也就是說,它們會被視為必須符合輸入的字元序列。 例如,指定要輸入百分比符號字元,請使用 %%

星號 (*) 跟在百分比符號後面會抑制指派下一個輸入欄位,解譯為指定類型的欄位。 欄位會掃描,但不會儲存在引數中。

系列函式的安全版本(後 _s 綴為的函式) scanf 需要 、、 sS[ 類型的 cC 每一個參數,才能立即傳遞緩衝區大小參數。 如需系列函式安全版本 scanf 的詳細資訊,請參閱 scanf_s 、、 _scanf_s_lwscanf_s_wscanf_s_l

另請參閱

scanf 寬度規格
scanf 輸入欄位字元
scanf, _scanf_l, wscanf, _wscanf_l
scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l