#include <stdio.h>
int scanf(const char *format, ...);
int fscanf(FILE *stream, const char *format, ...);
int sscanf(const char *str, const char *format, ...);
#include <stdarg.h>
int vscanf(const char *format, va_list ap);
int vsscanf(const char *str, const char *format, va_list ap);
int vfscanf(FILE *stream, const char *format, va_list ap);
format 是一個字串,描述如何處理輸入字元。如果沒有輸入、或比對失敗,就停止,回傳轉換成功的次數。format 內容可以是:
- 空白字元集,包括 space、tab、newline 等,比對 0 個以上的空白字元集。
- % 開頭的轉換規範。
- 其它一般字元
- (optional) '*':依照轉換定義讀取,但不儲存,不計成功轉換次數。
- (optional) 'm':用在字串轉換 (%s, %c, %[),自動配置足夠的記憶體放字串,之後需要 free()。
- (optional) 十位數字說明最大 field width,不含字串結尾 0。
- (optional) 改變存成的資料型態
- h:存成 short int 或 unsigned short int
- hh:存成 signed char 或 unsigned char
- j:存成 intmax_t 或 uintmax_t
- l:整數存成 long 或 unsigned long,浮點存成 double
- ll:跟 L 一樣,用在 %c 或 %s 表示寬字元。
- L:整數存成 long long,浮點存成 long double
- t:存成 ptrdiff_t
- z:存成 size_t
- 轉換定義
- %:比對 %
- d:比對十進位整數,可以是有號,結果存到 int
- i:比對對整數,可以是有號,可以是 0x 或 0X 開始的十六進位數字、0 開頭的八進位數字、不然則是十進位。結果存到 int。
- o:比對無號八進位整數,結果存到 unsigned int。
- u:比對無號十進位整數,結果存到 unsigned int。
- x, X:比對無號十六進位整數,結果存到 unsigned int。
- f, e, g, E, a:有號浮點數字,結果存到 float。
- s:不含 white-space 的字串,存到字串。
- c:數個字元,存到 char 陣列。
- [字元集]:比對字元集存到字串。字元集不能是空的,不省略開頭的 white space。排除這些字元集的話,字元集以 ^ 開始。如果字元集要包含 ],可放在第一個字元。兩字元間可夾 - 表示範圍。例如 [^]0-9-] 表示任何字元不含 ]、0 到 9、-。
- p:比對指標值存到 void 指標。
- n:計數字元數目存到 int。可能不計成功的轉換次數。
問題:可以忽略開頭字元嗎?
參考:printf