Scanf系列函数的高级用法
Scanf 从一个字符串中读进指定格式相符的数据,主要是用于从给定缓冲区内容输入到变量,达到给变量赋值的目的。就是所谓的格式化输入。
在一般情况下,我们在使用scanf时都只使用了其简单的用法。比如:
Int a = 0;
Int b = 0;
Scanf(“%d %d”,&a,&b);
若这段代码在控制台程序(非界面程序)中,会让用户输入两个数字,让后分别将数字的值赋值给a,b.
如果在scanf中加入{%[*] [width] [size]type | ' ' | '\t' | '\n' | }等,就会有很多其它高级功能了。
比如下面这个例子:
Char str[512] = {0};
scanf("%[^\n]%*c", str);
这个例子表示读到字符‘\n’停止读取,并且读入一个字符但是不赋值给变量。
scanf()函数是通用终端格式化输入函数,它从标准输入设备(键盘) 读取输入的信息。可以读入任何固有类型的数据并自动把数值变换成适当的机内格式。其调用格式为: scanf("<格式化字符串>",<地址表>);scanf()函数返回成功赋值的数据项数,出错时则返回EOF。其控制串由三类字符构成:
1. 格式化说明符;
%a 读入一个浮点值(仅C99有效)
%A 同上
%c 读入一个字符
%d 读入十进制整数
%i 读入十进制,八进制,十六进制整数
%o 读入八进制整数
%x 读入十六进制整数
%X 同上
%c 读入一个字符
%s 读入一个字符串
%f 读入一个浮点数
%F 同上
%e 同上
%E 同上
%g 同上
%G 同上
%p 读入一个指针
%u 读入一个无符号十进制整数
%n 至此已读入值的等价字符数
%[] 扫描字符集合
%% 读%符号
附加格式说明字符表修饰符 说明L/l 长度修饰符 输入"长"数据
h 长度修饰符 输入"短"数据
W 整型常数 指定输入数据所占宽度
* 星号 空读一个数据
hh,ll同上h,l但仅对C99有效。
1、 * 亦可用于格式中, (即 %*d 和 %*s) 加了星号 (*) 表示跳过此数据不读入. (也就是不把此数据读入参数中)
2、{a|b|c}表示a,b,c中选一,[d],表示可以有d也可以没有d。
3、width表示读取宽度。
4、参数的size: 常用的有hh表示单字节size,h表示2字节 size,其他详见mansscanf或msdn
5、type :这就很多了,就是%s,%d之类。
2. 空白符;
空白字符空白字符会使scanf()函数在读操作中略去输入中的一个或多个空白字符,空白符可以是space,tab,newline等等,直到第一个非空白符出现为止。
3. 非空白符;
非空白字符一个非空白字符会使scanf()函数在读入时剔除掉与这个非空白字符相同的字符。
4.scanf的结束
scanf()函数接收输入数据时,遇以下情况结束一个数据的输入:(不是结束该scanf函数,scanf函数仅在每一个数据域均有数据,并按回车后结束)。
① 遇空格、“回车”、“跳格”键。
② 遇宽度结束。
③ 遇非法输入。