函數:scanf
功能:執行格式化輸入
用法:int scanf(char *format[,argument,...]);
scanf()函數是通用終端格式化輸入函數,它從標准輸入設備(鍵盤) 讀取輸入的信息。可以讀入任何固有類型的數據並自動把數值變換成適當的機內格式。
其調用格式為: scanf("<格式化字符串>",<地址表>);
scanf()函數返回成功賦值的數據項數,出錯時則返回EOF。
其控制串由三類字符構成:
1.格式化說明符;
2.空白符;
3.非空白符;
2.空白符;
3.非空白符;
一、格式化說明符
格式字符 說明
%a 讀入一個浮點值(僅C99有效)
%A 同上
%c 讀入一個字符
%d 讀入十進制整數
%i 讀入十進制,八進制,十六進制整數
%o 讀入八進制整數
%x 讀入十六進制整數
%X 同上
%c 讀入一個字符
%s 讀入一個字符串
%f 讀入一個浮點數
%F 同上
%e 同上
%E 同上
%g 同上
%G 同上
%p 讀入一個指針
%u 讀入一個無符號十進制整數
%n 至此已讀入值的等價字符數
%[] 掃描字符集合
%% 讀%符號
附加格式說明字符表
%A 同上
%c 讀入一個字符
%d 讀入十進制整數
%i 讀入十進制,八進制,十六進制整數
%o 讀入八進制整數
%x 讀入十六進制整數
%X 同上
%c 讀入一個字符
%s 讀入一個字符串
%f 讀入一個浮點數
%F 同上
%e 同上
%E 同上
%g 同上
%G 同上
%p 讀入一個指針
%u 讀入一個無符號十進制整數
%n 至此已讀入值的等價字符數
%[] 掃描字符集合
%% 讀%符號
附加格式說明字符表
修飾符 說明
L/l 長度修飾符 輸入"長"數據
h 長度修飾符 輸入"短"數據
W 整型常數 指定輸入數據所占寬度
* 星號 空讀一個數據
h 長度修飾符 輸入"短"數據
W 整型常數 指定輸入數據所占寬度
* 星號 空讀一個數據
二、空白符
空格,制表符和換行,一般scanf函數(格式字符為%c時除外)會在讀操作中略去輸入中一個或多個空白符,空白符可以,直到第一個非空白字符出現為止,遇到空白字符時讀取停止,並把空白字符留在輸入隊列中。
三、非空白字符
一個非空白字符會使scanf()函數在讀入時剔除掉與這個非空白字符相同的字符。
四、特別說明 %c和%s
%s 是讀字符串,讀取時開始時忽略空白符,從第一非空白符開始讀,直到遇到空白符停止,將空白符留在輸入隊列
%c時讀字符,如何字符都可以讀取(包括空白符)
例1:
char *s; scanf("%s",s); printf("%s\n",s); scanf("%s",s); printf("%s\n",s); 輸入 123_456回車 // _代表空格 輸出: 123 456
例2:
char str[10]; scanf("%c", &ch); 輸入: 回車
會一直要求輸入,因為空格回車都是空白符,沒有數據,所以沒辦法讀入
例3:
char str[10]; char ch; scanf("%s", str); scanf("%c", &ch); printf("%s\n", str); printf("%c", ch); 輸入 1234_123 輸出 1234 空格
對於第一個%s讀入時遇到分隔符“空格”就停止,但是空格還是保存在緩沖區的。對於%c讀入時候,“空格、\n、TAB”等是正常字符,所以第二次讀入時候讀取緩沖中的第一個字符“空格”