scanf的使用详解
1、简介
scanf函数是标准的格式化输入函数,也就是从标准输入设备(键盘) 读取输入的信息。在stdio.h中声明,因此要使用scanf函数,必须加入 #import <stdio.h>。使用scanf时候时,需要传入变量地址作为参数,且scanf函数会等待标准输入设备(键盘)输入数据,并将输入的数据赋值给变量地址对应的变量。且返回成功赋值的数据项,如果遇到错误或遇到end of file,返回值为EOF。(scanf是从标准输入(stdin)缓冲区中读取输入的数据)
2、基本用法
(1)、语法格式:
scanf(“格式说明字符串”,变量地址);(变量地址必须有效,并且与格式说明符的顺序一致)
如:
(2)、执行过程分析:
使用scanf函数时,传入的参数,第一个是格式说明字符串,其它是一一对应的变量地址参数。执行scanf函数的时候,会等待标准设备输入,并不会往后执行代码。输入完毕后,敲一下回车键,目的是告诉scanf函数我们已经输入完毕了,scanf函数会将输入的值赋一一对应的赋值给后面的地址对应的变量。
如: int age;
scanf(“%d”, &age);
执行到scanf函数的时候,会等待输入。第一个参数是格式说明字符串,%d,说明要求用户输入十进制形式的一个整数。这里注意第二个参数不是age变量,而是age变量的地址&age,(&是c语言中的地址运算符。可以获取变量地址)。当用户输入完一个整数后,敲一下回车键。scanf函数会把输入的数据传递给地址对应的变量。并返回赋值成功个数。这样就执行完毕scanf这函数,继续后面代码的执行。
(3)注意点:
1》输入数据时候,遇以下情况结束一个数据的输入
*有间隔符合的情况下,以输入的间隔符为结束一个数据的输入的标识
(有间隔符合输入数据的时候必须添加间隔符号,否则报错,
注意在有间隔符号的情况下,它们之间如果加入空格会造成的影响)
*无间隔符合的情况下,以tab、空格、回车为结束一个数据输入的标准
*达到数据的宽度
*输入非法数据
2》scanf函数接收输入数据时,遇以下情况结束一个变量的赋值:(不是结束该scanf函数)
*读到自定义的间隔符
*默认情况下,读取到空白符,如tab、空格、回车。
*达到制定数据的宽度
*读到到非法输入,函数直接返回(后面的其它格式符都不会)
3》scanf函数结束情况
*每一个格式符均有对应的数据,然后按回车后结束
4》读到非法数据的处理方式:
完成输出,按回车键盘后。scanf函数将输入的数据赋值给后面对应位置的变量的时候,如果一遇到不匹配的就会直接返回,不再给后面变量赋值。如果第一个就不匹配,整个scanf函数中的,变量都不会赋值,或因缓冲区问题,赋错误值。
5》开头空白符号无效(char类型除外)
当一次多个变量赋值的时候,开头就使用空格、tab、回车,无效,只有在输入数据后面使用它们才会作为间隔或结束符合使用(char除外,对应char它们都是有效输入数据)
3、格式说明字符串详解
(1)、一般结构:
%[*][宽度][F/N][h/l]类型字符
由三部分组成
1》格式符(格式化说明符)
2》空白符
3》非空白符
(2)、三个部分的详解:
1》格式符(格式化说明符
<strong>%a 读入一个浮点值(仅C99有效)
%A 同上
%c 读入一个字符
%d 读入十进制整数
%i 读入十进制,八进制,十六进制整数
%o 读入八进制整数
%x 读入十六进制整数
%X 同上
%c 读入一个字符
%s 读入一个字符串
%f 读入一个浮点数
%F 同上
%e 同上
%E 同上
%g 同上
%G 同上
%p 读入一个指针
%u 读入一个无符号十进制整数
%n 至此已读入值的等价字符数
%[] 扫描字符集合
%% 读%符号</strong>
修饰符
*:星号 ,用于空读一个数据。
百分号(%)与格式符之间的星号(*)表示读指定类型的数据但不保存
L/l 长度修饰符 输入"长"数据
h 长度修饰符 输入"短"数据
W 整型常数 指定输入数据所占宽度
hh,ll同上h,l但仅对C99有效
2》空白符
空白字符,会使scanf函数读操作中略去输入中一个或多个空白符,空白符可以是空格、tab、回车
3》非空白符