scanf原型:参见《C语言大全》和K&C
# include <stdio.h>;
int scanf( const char *format, ... );
函数 scanf() 是从标准输入流 stdin 中读内容的通用子程序,可以读入全部固有类型的数据并自动转换成机内形式。
在 C99 中,format 用 restrict 修饰。format 指向的控制串由以下三类字符组成:
● 格式说明符
● 空白符
● 非空白符
转换字符(就是%后跟的部分)
a 读浮点值(仅适用于 C99)
A 读浮点值(仅适用于 C99)
c 读单字符
d 读十进制整数
i 读十进制、八进制、十六进制整数
e 读浮点数
E 读浮点数
f 读浮点数
F 读浮点数(仅适用于 C99)
g 读浮点数
G 读浮点数
o 读八进制数
s 读字符串
x 读十六进制数
X 读十六进制数
p 读指针值
n 至此已读入值的等价字符数
u 读无符号十进制整数
[ ] 扫描字符集合
% 读 % 符号(百分号)
妙招1, 读取以回车结尾的输入串:
scanf("%[^/n]",strings);
/*[]指定读取字符集,为 回车符号 的补集,这样就可以读取字符串,并允许在串中带入空格字符*/
妙招2, 及时吸收缓冲的回车字符:
scanf("%d%*c", &i);
/* “*” 格式控制符号,是读取一个指定格式数据,并丢弃该数据。
在正常的输入情况下,比如输入整数时候, 终止输入时候会敲入一个回车,这个回车会滞留输入缓冲中,
对于后续输入为整数没有影响,但是如果后续的scanf 读取字符或者是字符串(%s %c),那么,
该滞留字符将被作为输入字符/字符串被接收*/
其中 [] 格式控制并不经常使用,但是不是说它的能力不足,
如果巧妙使用,可以有很多妙招, 这里就不一一列举了 .....
# include <stdio.h>;
int scanf( const char *format, ... );
函数 scanf() 是从标准输入流 stdin 中读内容的通用子程序,可以读入全部固有类型的数据并自动转换成机内形式。
在 C99 中,format 用 restrict 修饰。format 指向的控制串由以下三类字符组成:
● 格式说明符
● 空白符
● 非空白符
转换字符(就是%后跟的部分)
a 读浮点值(仅适用于 C99)
A 读浮点值(仅适用于 C99)
c 读单字符
d 读十进制整数
i 读十进制、八进制、十六进制整数
e 读浮点数
E 读浮点数
f 读浮点数
F 读浮点数(仅适用于 C99)
g 读浮点数
G 读浮点数
o 读八进制数
s 读字符串
x 读十六进制数
X 读十六进制数
p 读指针值
n 至此已读入值的等价字符数
u 读无符号十进制整数
[ ] 扫描字符集合
% 读 % 符号(百分号)
妙招1, 读取以回车结尾的输入串:
scanf("%[^/n]",strings);
/*[]指定读取字符集,为 回车符号 的补集,这样就可以读取字符串,并允许在串中带入空格字符*/
妙招2, 及时吸收缓冲的回车字符:
scanf("%d%*c", &i);
/* “*” 格式控制符号,是读取一个指定格式数据,并丢弃该数据。
在正常的输入情况下,比如输入整数时候, 终止输入时候会敲入一个回车,这个回车会滞留输入缓冲中,
对于后续输入为整数没有影响,但是如果后续的scanf 读取字符或者是字符串(%s %c),那么,
该滞留字符将被作为输入字符/字符串被接收*/
其中 [] 格式控制并不经常使用,但是不是说它的能力不足,
如果巧妙使用,可以有很多妙招, 这里就不一一列举了 .....