讲C语言,大多按教材按部就班,以C二级考试为目的,渐渐的,对很多常用函数的理解就停留在了常见的使用形式,未能深入下去。一次做某道题,发现scanf函数使用的细微处,故整理记下,以备查。
scanf(
格式控制字符串
,
参数
地址
列表
);
格式控制字符串包含4种不同的字符:
(1)格式转换说明符
%c 以字符形式输入单个字符;
%s 输入字符串,以非空字符开始,遇第一个空白字符结束;
%d 以带符号十进制形式输入整型数据;
%f 以小数形式输入浮点数;
%e 以标准指数形式输入 ;
%o 以八进制无符号形式输入(无前导0);
%x 以十六进制无符号形式输入(无前导0x)。
m 表示数据占用的宽度
l 加在d、o、x、u前:输入长整型, 加在f、e 前:输入双精度型;
* 本输入项在读入后不赋给相应的变量;
L 加在f、e 前:输入long double型;
h 加在d、o、x 前:输入短整型。
(3)空白字符
空白字符会使scanf()函数在读操作中略去输入中的一个或多个空白字符。
(4)非空白字符
一个非空白字符会使scanf()函数在读入时剔除掉与这个非空白字符相同的字符。
scanf()
的工作原理
–
系统分配一个读缓冲区
–
每次执行
scanf
时,先从缓冲区读取数据
对于
%c
以外的格式符,
忽略
所有先导空白字符
(
空格符
、回车符、制表符
)
对于
%c
格式符,返回缓冲区中第一个字符,
包括
先导空
白字符
–
如果缓冲区没有数据,则等待用户输入
–
格式控制串可以使用空白字符或其它非空白字符,使用空白
字符会使
scanf()
函数在读操作中略去输入中的一个或多个空
白字符。
–
输入结束的标志
–
遇到空格符、回车符、制表符
(TAB)
–
达到输出域宽
–
遇非法字符输入
%*2d表示跳过2个整数;
结果a=12,b=34。输入时用空格隔开,(使用空白字符会使scanf()函数在读操作中略去输入中的一个或多个空白字符)。
scanf("%d,%d",&a,&b);输入时需要输入12,34(“
,
”为非空白字符。
一个非空白字符会使scanf()函数在读入时剔除掉与这个非空白字符相同的字符。
scanf("%2d%2d",&a,&b);即使输入1234,%2d说明了读2位整数给a,2位整数给b,即a=12,b=34
scanf("%d%*%d",&a,&b);
用户可以以任意字符(回车、空格、制表
符、逗号、其他)作为分隔符进行数据的输入。