scanf()是一个具有多种用途的输入函数,他从标准输入流stdin读取数据并把数据存储在参数列表指定的变量中。它可以读取所有的内置数据类型并将他们自动转化为适当的内部格式。
#include
int scanf(const char* format,…);
format指定的控制字符串由以下三类字符组成:
1.格式控制符
2.空白字符
3.非空白字符
格式说明符:
%c————读单个字符
%d————读一个十进制整数
%i ————读一个浮点数
%e————读一个浮点数
%f ————读一个浮点数
%g————读一个浮点数
%o————读一个八进制数
%s————读字符串
%x————读一个十六进制数
%p————读取一个指针
%n————接收一个整型值,这个值等于到目前为止所读取的字符个数
%u————读取一个无符号整型数
%[]————扫描一组字符
%%————读取一个百分号
如果是读取一个长整形数,应在格式说明符前放置一个l;如果是读取一个短整型数,应在格式说明符前放置一个h。这些修饰符可以与格式码d,i,e,f,g,o,u,x一起使用。
(
默认情况下,%f,%e,%g将数据赋给f一个laot。如果在其之前加上l,则赋给double型。如果加上L则赋给long double型
)
所有通过scanf()接收值的变量必须根据他们的地址传递,所以所有的参数都是指针,输入的数据必须被空格,制表符或换行符分隔,逗号和分号不算分隔符。
(
scanf(“%d%d”,&a,&b);
接受 10 20 这样的输入,不接受10,20这样的输入
)
放置在%之后和格式码之前的星号(*)将读取指定类型的数据,但是并不对其赋值。
(
scanf(“%d%*c%d”,&a,&b);
输入10@20,则将10赋给a,20赋给b
)
放置在%和格式码之间的整数用来限制字符个数。
(
scanf(“%4s”,str_array);
输入abcdfefghijklmn,只将abcd赋给了str_array。
如果输入流大于4,下一次调用时将从此次调用停止的地方开始。
)
扫描集:
(
scanf(“%[ABC]”,p_c);
只读取字符A,B,C。
scanf(“%[a-z]”,p_c);
只读取a~z之间的字符。
遇到一个不在字符集中的字符为止。
如果集合中第一个字符是^,则指定一个倒置集,scanf接收所有没有被扫描集定义的字符。
扫描集是大小写敏感的。
)
scanf()返回被成功赋值的域的个数,不包括被读取而未被赋值的域,如果在第一个域被赋值之前发生了错误,返回EOF。