格式規格欄位: scanf
和 wscanf
函式
此處的信息適用於整個 scanf
函式系列,包括安全版本。 它會描述用來告訴 scanf
函式如何將輸入數據流,例如輸入數據流 stdin
剖析成插入程式變數的值中的符號。
自 format
變數是一個字串,指定輸入的解譯,而且可以包含一或多個:
空格符:空白(
\t
或換行符(\n
)。 空白字元會使得scanf
讀取 (但不儲存) 輸入中的所有連續空格字元,一直到下一個非空白字元。 格式中一個空格字元會比對輸入中任何數字 (包括 0) 和空白字元的組合。不含百分比符號 (
%
) 的非空白字元。 非空白字元會使得scanf
讀取 (但不儲存) 符合的非空白字元。 如果輸入數據流中的下一個字元不相符,則會scanf
終止。格式規格,由百分比符號 (
%
) 引入。 格式規格會使scanf
輸入中的字元讀取和轉換成指定類型的值。 值會指派給引數清單中的引數。格式規格的格式如下︰
%
[*
][width
][{h
ll
||L
l
|I64
|}]type
在這裡,、
width
、h
、l
、ll
、I64
和L
代表scanf
寬度規格,並type
代表scanf
類型欄位字元。
自 format
變數字串會從左至右讀取。 格式規格以外的字元應該符合輸入數據流中的字元序列。 會掃描輸入數據流中的相符字元,但不會儲存。 如果輸入數據流中的字元與格式規格衝突, scanf
則會終止字元,而且字元會留在輸入數據流中,就好像尚未讀取一樣。
遇到第一個格式規格時,會根據此規格轉換第一個輸入字段的值。 這個值會儲存在自變數後面的 format
第一個自變數所指定的位置。 第二個格式規格會導致第二個輸入字段透過格式字串的結尾轉換並儲存在下一個自變數中,依此儲存。
輸入欄位定義為:所有字元最多到第一個空格元(空格、製表元或換行符),或直到無法根據格式規格轉換的第一個字元,或直到達到欄位寬度(如果指定的話) 為止。 如果指定的規格有太多引數,額外的引數會予以評估但忽略。 如果格式規格沒有足夠的自變數,則結果無法預測。
每個格式規格的欄位都是單一字元,或表示特定格式選項的數字。 type
字元出現在最後一個選擇性格式欄位之後,決定將輸入欄位解譯為字元、字串或數字。
最簡單的格式規格只包含百分比符號和一個 type
字元 (例如 %s
)。 如果百分比符號 (%
) 後面接著沒有意義的字元做為格式控制字元,該字元和下列字元(最多下一個百分比符號)會被視為一般字元序列。 也就是說,它們會被視為必須符合輸入的字元序列。 例如,指定要輸入百分比符號字元,請使用 %%
。
星號 (*
) 跟在百分比符號後面會抑制指派下一個輸入欄位,解譯為指定類型的欄位。 欄位會掃描,但不會儲存在自變數中。
系列函式的安全版本(後_s
綴為的函式)scanf
需要 、、 s
S
或 [
類型的c
C
每一個參數,才能立即傳遞緩衝區大小參數。 如需系列函式安全版本scanf
的詳細資訊,請參閱scanf_s
、、_scanf_s_l
wscanf_s
、 _wscanf_s_l
。
另請參閱
scanf
寬度規格
scanf
輸入欄位字元
scanf
、 、 _scanf_l
、 wscanf
_wscanf_l
scanf_s
、 、 _scanf_s_l
、 wscanf_s
_wscanf_s_l