scanf函数
一.scanf函数的定义和基本用法
1.scanf()函数用于读取用户的键盘输入。简而言之,就是在代码中,当我们需要自己手动输入一个数据的时候,我们就会运用到scanf函数。只有有了我们在键盘上的标准输入,才会有屏幕上的标准输出
2.scanf函数的第一个参数是格式化字符串,里面放置占位符,这一点与我之前为大家介绍的printf函数的格式形式大致相同,而与其不同的是,我们在占位符后的输入内容中的变量前必须添加取地址符 “ & ”(在变量前都需加 & ,指针变量除外,关于指针在后续内容会为大家讲到)
3.scanf可以连续处理多个占位符,当然,有多少个占位符,就得有多少个变量与其一一对应
4.众所周知,在C语言中,所有数据都是有类型的,因此在scanf函数中也是如此,什么类型的变量我们就对应什么类型的操作符,整型就用“ % d ”,浮点型就用“ % f ”(关于操作符我在前一篇博客中为大家详细讲解到了,不熟悉的小伙伴们可以先移步去看看)
5.scanf函数在处理数值占位符时,会自动过滤掉空白字符,包括空格,制表符,换行符等。因此,就算我们使用回车键,将输入分成几行,也不影响它的解读
scanf函数的运用演示如图所示:
二.scanf函数的返回值
scanf函数的返回值是一个整数,则表示成功读取的变量个数。如果返回值为0,则表示没有读取到任何项,或者匹配失败。如果在成功读取任何数据之前,发生了读取错误或者遇到文件结尾,则返回常量EOF(-1)(EOF表示end of file,是文件结束的标志)
在VS环境中,当我们在还未完全输入所有变量时,连按三次Ctrl+Z,便可以提前结束输入,直接输出,如图:
若是我们一个数据也不输入,直接连按三次Ctrl+Z,就会返回EOF(-1),如图:
三.占位符
scanf函数常用的占位符与printf函数基本一致,如:
在以上罗列的占位符所有中,有着两个特殊的字符:
1.除了%c以外,都会自动忽略掉起首的空白字符。而%c不忽略空白字符,它在运行时,总是返回当前的第一个字符,无论该字符是否为空格。那么这个时候就有小伙伴要说了,我不管我不管,我就要霸道总裁强制爱,就要跳。那么我们想要强制跳过字符前的空白字符呢,也是有办法滴,当我们在 % c 前添加一个空格,就可以实现跳过零个或多个空白字符,如 scanf (“ % c ”, & ch )
2.占位符 % s ,它其实不能简单地将其等同于字符串,它的使用规则,从当前第一个非空白字符开始读取,直到遇到空白字符停止读取(即空格,制表符,换行符等)。另外,scanf()在遇到% s占位符,会在字符串变量末尾存储一个空字符 “ \ 0 ”
在我们scanf()将字符串读入字符数组时,系统不会自动检测字符串是否超过了数组长度,当我们储存的字符串长度超过了数组长度时,系统就会报错甚至导致程序崩溃,因此,为了防止这种情况的发生,我们在使用% s 占位符时,一般会指定字符串长度,表达格式为:% [ x ] s ,其中 x 为整数,表示该字符串读取的最大长度,超过这个数,后面的字符就会被丢弃,这样就不会出现数组溢出的情况了
四.赋值忽略符
1.我们必须保持占位符的格式和我们输入的格式一致,当我们想要输出:年-月-日 ,这种格式时,我们就必须在占位符和我们标准输入时都添加“ - ”才行,否则scanf函数就会解析失败,如图:
这个时候我们就可以运用scanf函数中的赋值忽略符:“ * ” ,只要我们把 * 加在任何占位符的百分号后面,该占位符就不会返回值,解析后将被丢弃
OKK,有关scanf()函数的知识点就暂时给大家总结这么多了,这个点不算太难,相信大家都能get 到。scanf函数应用较多,而在使用时特别容易忽略掉变量前的取地址符 & ,别问我怎么知道的好吧,都是血与泪的教训,大家对此也要多加注意。然后前几天较忙,所以更新比较慢,还望诸君见谅,共勉!