Scanf()函数

本文详细介绍了scanf函数在C语言中的定义、基本用法,包括格式化字符串、占位符类型匹配、返回值解释以及赋值忽略符的使用。重点强调了变量前的取地址符和在处理字符串时的特殊处理方法。
摘要由CSDN通过智能技术生成

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 :字符
(2)%d :整数
(3)%f : float 类型浮点数
(4)%lf : double 类型浮点数
(5)%Lf : long double 类型浮点数
(6)%s :字符串
(7)%[] :在方括号中指定⼀组匹配的字符(如 %[0-9] ),遇到不在集合之中的字符,匹配将会
停止

在以上罗列的占位符所有中,有着两个特殊的字符:

1.除了%c以外,都会自动忽略掉起首的空白字符。而%c不忽略空白字符,它在运行时,总是返回当前的第一个字符,无论该字符是否为空格。那么这个时候就有小伙伴要说了,我不管我不管,我就要霸道总裁强制爱,就要跳。那么我们想要强制跳过字符前的空白字符呢,也是有办法滴,当我们在 % c 前添加一个空格,就可以实现跳过零个或多个空白字符,如 scanf (“     % c ”, & ch )

2.占位符 % s ,它其实不能简单地将其等同于字符串,它的使用规则,从当前第一个非空白字符开始读取,直到遇到空白字符停止读取(即空格,制表符,换行符等)。另外,scanf()在遇到% s占位符,会在字符串变量末尾存储一个空字符 “ \ 0 ”

在我们scanf()将字符串读入字符数组时,系统不会自动检测字符串是否超过了数组长度,当我们储存的字符串长度超过了数组长度时,系统就会报错甚至导致程序崩溃,因此,为了防止这种情况的发生,我们在使用% s 占位符时,一般会指定字符串长度,表达格式为:% [ x ] s ,其中 x 为整数,表示该字符串读取的最大长度,超过这个数,后面的字符就会被丢弃,这样就不会出现数组溢出的情况了

四.赋值忽略符

1.我们必须保持占位符的格式和我们输入的格式一致,当我们想要输出:年-月-日 ,这种格式时,我们就必须在占位符和我们标准输入时都添加“ - ”才行,否则scanf函数就会解析失败,如图:

这个时候我们就可以运用scanf函数中的赋值忽略符:“ * ” ,只要我们把 * 加在任何占位符的百分号后面,该占位符就不会返回值,解析后将被丢弃

如图, % * c 就是在占位符的百分号后面加入了赋值忽略符 “ * ” ,表示这个占位符没有对应的
变量,解读后不必返回

OKK,有关scanf()函数的知识点就暂时给大家总结这么多了,这个点不算太难,相信大家都能get 到。scanf函数应用较多,而在使用时特别容易忽略掉变量前的取地址符 & ,别问我怎么知道的好吧,都是血与泪的教训,大家对此也要多加注意。然后前几天较忙,所以更新比较慢,还望诸君见谅,共勉!

  • 32
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值