11.6scanf
介绍
scanf
可以通过输出给变量赋值
程序运行到该处时会停止,等待用户输入
- 当按下回车时,表示输入完成(或者说是该数据输入完成,用在最后一个数据,如果不是最后一个可以使用空格),(此时输入的内容会放进输入流里,等待计算机处理),然后计算机对用户输入的数据逐一处理(意思是可以一次性输入大量内容,计算机会逐个处理,而不会丢失)。
scanf("%d",&i);
告诉计算机输入的是一个整型,然后计算机通过函数将输入流里的数据传到变量i
所在的地址,即&i
,即,如果变量本身是地址,可以不加&
(取地址符)
scanf
会自动过滤空白字符,包括空格,制表符,换行符,即可以逐个输入用空格相隔,也可以逐行输入
例子:
scanf("%d%f", &x, &y);
//输入“-13.45e12# 0”
//整数读到-13
//浮点读取.45e12(科学计数法)
//停止读取,但缓存还在
与
scanf
相似的输入函数有a = getchar();
(同理putchar(a);
,逐个输入,包括一切字符,但一次只输入一个,当上一个输入使用scanf
时,第一次使用时会认为留在缓存的回车键是一个字符。需注意!!
scanf
也可以输入特殊格式,如,输入时间xx:xx
scanf("%2d:%2d",&hour,&min);
-
scanf
的返回值
当读取成功返回读取变量个数,当没有读取或匹配失败,返回0,当读取错误或读取到文件结尾(?),返回EOF
当连按三次ctrl+z
时,会强制结束输入,如果在此之前为读取任何数据,则返回EOF
%[]
:在方括号指定一组匹配的字符,如果不在集合之中的字符,匹配将会停止,例:%[0-9]
强制跳过0各或多个空白字符,可以在双引号开头加上一个空格
对与
scanf
,%s
的读取结束标志是空白字符,读取结束后自动存一个\0
,即该函数不适合读取有空格的字符串该函数不会检测字符数组是否越界,所以建议加上整数限制输入长度(遇到空白字符仍然停止)
#include <stdio.h> int main() { char name[11]; scanf("%10s", name);//\0直接加入,所以长度要减一 return 0; }
-
赋值忽略符
对于年月日,可以输入为2020-01-01
也可以是2020/01/01
,所以我们可以这样写
scanf("%d%*c%d%*c%d",&year,&month,&day);
代表该占位符没有对应的变量,解读后不返回