11.6

发布时间 2023-11-06 23:45:16作者: 威猛彪悍大甜妹

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);

代表该占位符没有对应的变量,解读后不返回