Share via


scanf 類型欄位字元

下列資訊適用於任何 scanf 系列的函式,包含安全版本,例如 scanf_s

type 字元是唯一必要的格式欄位;它會在任何選擇性的格式欄位之後出現。 type 字元會決定相關聯的引數是否會解譯為字元、字串或數字。

type 函式的 scanf 字元

字元 預期輸入類型 引數類型 安全版本中的大小引數為何?
c 字元。 搭配 scanf 函式使用時,會指定單一位元組字元;搭配 wscanf 函式使用時,會指定全形字元。 指定 c 時,會讀取通常會跳過的空白字元。 不同于其他類型欄位,欄位寬度規範會指出確切的字元數,而不是最大值。 若要讀取下一個非空白單一位元組字元,請使用 %1s;若要讀取下一個非空白寬字元,請使用 %1ws 搭配 char 函式使用時會指向 scanf ,搭配 wchar_t 函式使用時會指向 wscanf 必要。 大小不包含 Null 結束字元的空間。
C 相反大小字元。 搭配 scanf 函式使用時,會指定全形字元;搭配 wscanf 函式使用時,會指定單一位元組字元。 指定 C 時,會讀取通常會跳過的空白字元。 不同于其他類型欄位,欄位寬度規範會指出確切的字元數,而不是最大值。 若要讀取下一個非空白單一位元組字元,請使用 %1s;若要讀取下一個非空白寬字元,請使用 %1ws 搭配 wchar_t 函式使用時會指向 scanf ,搭配 char 函式使用時會指向 wscanf 必要。 Size 引數不包含 Null 結束字元的空間。
d 十進位整數。 指向 int 否。
i 整數。 若輸入的字串開頭為「0x」或「0X」則屬於十六進位,若字串開頭為「0」則屬於八進位,否則為十進位。 指向 int 否。
o 八進位整數。 指向 int 否。
p 十六進位數字中的指標位址。 讀取的位數上限取決於指標的大小(32 位或 64 位),這取決於機器架構。 "0x" 或 "0X" 視為前置詞。 指向 void* 否。
u 不帶正負號的十進位整數。 指向 unsigned int 否。
x 十六進位整數。 指向 int 否。
e, E, f, F, g, G 浮點值包含選用正負號 (+ 或 -)、一或多個一系列包含小數點的十進位數字,以及後面接著選擇性帶正負號的整數值之選擇性指數 (「e」或「E」)。 指向 float 否。
a, A 浮點數值包含一系列一或多個十六進位數字,該類數字包含選擇性小數點,以及後面接著十進位值的指數 ("p" 或 "P")。 指向 float 否。
n 沒有從資料流或緩衝區輸入讀取。 指向用來成功儲存字元數的 int,它會從資料流或緩衝讀取字元數,直到目前呼叫 scanf 函式或 wscanf 函式為止。 否。
s 字串,最多至第一個空白字元 (空格、定位字元或新行字元)。 若要讀取未以空白字元分隔的字串,請使用一組方括弧 ( [ ] ),如寬度規格 中所述 scanf 搭配 scanf 函式使用時,表示單一位元組字元;搭配 wscanf 函式使用時,表示全形字元陣列。 在任一情況下,字元陣列必須有足夠大的空間,以便納入輸入欄位以及自動加上之結束的 null 字元。 必要。 大小包含 null 結束字元的空間。
S 相反大小字串,最多至第一個空白字元 (空格、定位字元或新行字元)。 若要讀取未以空白字元分隔的字串,請使用一組方括弧 ( [ ] ),如寬度規格 中所述 scanf 搭配 scanf 函式使用時,表示寬字元陣列;搭配 wscanf 函式使用時,表示單一位元組字元陣列。 在任一情況下,字元陣列必須有足夠大的空間,以便納入輸入欄位以及自動加上之結束的 null 字元。 必要。 大小包含 null 結束字元的空間。

如有必要,大小引數應該在套用引數之後立即傳入參數清單中。 例如,下列程式碼:

char string1[11], string2[9];
scanf_s("%10s %8s", string1, 11, string2, 9);

會將最大長度 10 的字串讀取至 string1,並將最大長度 8 的字串讀取至 string2。 緩衝區大小應該至少比寬度規格多出一個空間,因為空間必須保留給 null 結束字元。

格式字串可以處理單一位元組或寬字元輸入,無論使用單一位元組字元或寬字元版本的函式。 因此,若要使用 scanf 函式和 wscanf 函式來讀取單一位元組或寬字元,請使用下列的格式指定名稱。

若要將字元讀取為 使用此函數 使用這些格式指定名稱
單一位元組 scanf 函式 chchC
單一位元組 wscanf 函式 ChchC
全形 wscanf 函式 clclC
全形 scanf 函式 ClclC

若要使用與 scanf 函式和 wscanf 函式掃描字串,請使用上方表格搭配格式型別指定名稱 sS ,而非 cC

另請參閱

scanf, _scanf_l, wscanf, _wscanf_l