C語言scanf()函數:格式化輸入函數

頭文件:#include

scanf() 函數用來格式化輸入數據,即按用戶指定的格式從鍵盤上把數據讀入到指定的變量中。其原型爲:
int scanf ( char * format [ ,argument, ... ]);

其調用格式爲:      scanf("<格式化字符串>",<地址表>);
scanf()函數返回成功賦值的數據項數,出錯時則返回EOF
【參數】format爲格式化控制字符串,可以由三類字符構成。

1) 格式化說明符
 
格式字符  說明
 %a %A 讀入一個浮點值(僅C99有效)
 %c 讀入一個字符
 %d 讀入十進制整數
 %i 讀入十進制,八進制,十六進制整數
 %o 讀入八進制整數
 %x %X 讀入十六進制整數
 %s 讀入一個字符串
 %f %F 讀入一個浮點數
 %e %E 讀入一個浮點數
 %g %G 讀入一個浮點數
 %p 讀入一個指針
 %u 讀入一個無符號十進制整數
 %n 至此已讀入值的等價字符數
 %[] 掃描字符集合
 %% 讀%符號
             
另外,還有附加格式說明字符,用於追加在上面的格式說明符後面。

修飾符 說明
L\l 長度修飾符,輸入"長"數據
長度修飾符,輸入"短"數據
W 整型常數,指定輸入數據所佔寬度
* 星號,讀入後不賦予任何變量
hh 同 h,但僅對C99有效
ll 同 l,但僅對C99有效

這裏說下轉換字符:[...]和[ ^...]。 
一. [...]使用  輸入數據爲0984abcZXC
#include <stdio.h> 
main() 

char strings[100]; 
printf( "input strings:\n"); 
scanf( "%[1234567890] ",strings);//這裏用的是[1234567890]
printf( "%s ",strings); 
}
#include <stdio.h> 
main() 

char strings[100]; 
printf( "input strings:\n"); 
scanf( "%[0-9] ",strings); //這裏用的是[0-9] 
printf( "%s ",strings); 
}
輸出:0984 輸出:0984

      通過運行可以發現它的作用是:如果輸入的字符屬於方括號內字符串中某個字符,那麼就提取該字符;如果一經發現不屬於就結束提取。該方法會自動加上一個字符串結束符到已經提取的字符後面。 
       scanf( "%[1234567890] ",strings)和scanf( "%[0-9] ",strings)是相同的,%[0-9]中的'-'是範圍連接符。
常表示的有[0-9] 表示匹配0到9中任意數字,%[a-z] 表示匹配a到z中任意字符,%[A-Z] 表示匹配A到Z中任意字符,也可以[0-9a-zA-Z],也可以[0-5]表達。

2.%[^...]使用
   ^表示"非",即讀入其後面的字符就結束讀入。

取到指定字符爲止的字符串。
如在下例中,取遇到空格爲止字符串。
給定一個字符串iios/12DDWDFF@122,
獲取 / 和 @ 之間的字符串,先將 "iios/"過濾掉,再將非'@'後的一串內容送到buf中
#include <stdio.h> 
main() 

char strings[100]; 
printf( "input strings:\n"); 
scanf( "%[^ ]",strings); //輸入1aB 4tC
printf( "%s ",strings); 
}
#include <stdio.h> 
main() 

char strings[100]; 
printf( "input strings:\n"); 
scanf( "%*[^/]/%[^@]",strings); //輸入iios/12DDWDFF@122
printf( "%s ",strings); 
}
輸出:1aB 輸出:12DDWDFF

   通過運行可以發現它的作用是:如果輸入的字符屬於方括號內字符串中某個字符(空格),那麼就停止提取該字符後的字符了。
在第二個實例scanf( "%*[^/]/%[^@]",strings); 中用到了“*”,在這裏也解說下"*"表示讀入後不賦予任何變量。也就是把前面講到的字符過濾掉。
“%*[^/]/”意思爲字符過濾到第一個"/"字符位置,前面的字符不顯示,[^/]表示清除第一個"/"前的字符緩衝數據。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章