C語言scanf函數詳細解釋


函數:scanf

功能:執行格式化輸入

用法:int scanf(char *format[,argument,...]);

scanf()函數是通用終端格式化輸入函數,它從標准輸入設備(鍵盤) 讀取輸入的信息。可以讀入任何固有類型的數據並自動把數值變換成適當的機內格式。
其調用格式為:      scanf("<格式化字符串>",<地址表>);
scanf()函數返回成功賦值的數據項數,出錯時則返回EOF。
其控制串由三類字符構成:
1.格式化說明符;
2.空白符;
3.非空白符;

一、格式化說明符

格式字符           說明
%a                 讀入一個浮點值(僅C99有效) 
%A                 同上
%c                 讀入一個字符
%d                 讀入十進制整數
%i                 讀入十進制,八進制,十六進制整數
%o                 讀入八進制整數
%x                 讀入十六進制整數
%X                 同上
%c                 讀入一個字符
%s                 讀入一個字符串
%f                 讀入一個浮點數
%F                 同上
%e                 同上
%E                 同上
%g                 同上
%G                 同上
%p                 讀入一個指針
%u                 讀入一個無符號十進制整數
%n                 至此已讀入值的等價字符數
%[]                掃描字符集合
%%                 讀%符號
                
附加格式說明字符表
修飾符                       說明
L/l 長度修飾符               輸入"長"數據
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”等是正常字符,所以第二次讀入時候讀取緩沖中的第一個字符“空格”


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM