scanf 格式
int scanf( const char* format [,argument]... );int sscanf( const char *buffer, const char *format [, argument ] ... );
format格式控制字符为
%[*] [width] [{h | l | ll | I64 | L}]type其中有方括号[]的项为任选项。
空白字符:空格(' ');制表符('\t')或者换行符('\n')
表示输入数据的类型,其格式符和意义如下表所示。
格式 |
字符意义 |
d |
输入十进制整数 |
o |
输入八进制整数 |
x |
输入十六进制整数 |
u |
输入无符号十进制整数 |
f或e |
输入实型数(用小数形式或指数形式) |
c |
输入单个字符 |
s |
输入字符 |
“*”符:用以表示该输入项,读入后不赋予相应的变量,即跳过该输入值。
char * psrc = {"who am i"}; char a1[4] = {0}, a2[4] = {0}; sscanf(psrc, "%3s%*s%3s", a1, a2);输出为a1 = "who", a2 = "i",sscanf返回值为2。注意输入字符串需要带有空白字符否则a1=“whoami”,而a2等于空。
宽度width用来指定解析的字符个数
char * pnum = "12345678"; int i1 = 0, i2 = 0; ret = sscanf(pnum, "%4d%4d", &i1, &i2);结果为i1=1234, i2=5678,返回值为2。
如果输入字符的长度多于指定长度则截取对应内容
ret = sscanf("12345678", "%5d", &i1); ret = sscanf("who am i", "%2s", a1);结果i1=12345,a1="wh",返回值各为1.
如果输入字符的长度少于指定长度则取最长长度(注意空白字符的不受长度的影响)
ret = sscanf("12345678", "%9d", &i1); ret = sscanf("who am i", "%6s", a1);结果i1=12345678,a1=“who”。
16进制数字字符串转整数
char * p = "3031"; sscanf(p, "%x", &i1);结果i1=12337, 有意思的是如果解析变量为char数组则为字符串的逆,如
char a1[3] = {0}; sscanf(p, "%x", a1);结果a1="10"。