第四节 2个重要函数第二篇 scanf 函数

目录

4.2 scanf 函数

4.2.1 scanf基本用法

4.2.2scanf()数据的读取原则

4.2.3 scanf的返回值

4.2.4  占位符

4.2.5赋值忽略符


4.2 scanf 函数

在前一篇文章中,我们了解到输出函数可以使用printf函数,输入函数要使用什么呢?在c语言中,输入函数一般使用scanf函数,用于读取用户的键盘输入。

4.2.1 scanf基本用法

在程序运行这个语句时,程序会停下来,等待用户输入,用户输入数据后,按下回车键,程序会对用户输入的值进行处理,并返回对应的变量,使用时同样需要引入头文件stdio.h,与printf()函数类似

printf函数第⼀个参数是⼀个格式字符串,⾥⾯会放置占位符,占位符的作用是让编译器理解用户的输入及需要提取的数据类型,他的其余参数用于存放用户输入的变量,格式字符串中有多少个占位符对应后面有多少个参数 ,上述图片中,scanf的第一个参数是%d,表示用户输入的是一个整数,第二个参数是&i,将用户输入的整数存入到变量i中

变量前必须加取地址运算符&,因为scanf函数传递的不是值,是地址,是将变量i的地址指向用户输入的值,如果这里的变量是指针变量(例如字符串变量),就不用加取地址运算符&

4.2.2scanf()数据的读取原则

scanf()处理数值占位符时,会自动过滤掉空白字符包括空格,制表符,执行符等,所以在输入数据是,一个或多个空格或者将输入分为几行,都不会影响解读数据

由上图知, scanf() 读取⽤⼾输⼊时, %d 占位符会忽略起⾸的空格,从1处开始获取数据,读取到12停下来,因为后⾯的 . 不属于整数的有效字符。也就是说,占位符 第1次调⽤ %d 会读到12 ,第二次调用 scanf() 时,就会从上⼀次停⽌解读的地⽅,继续往下读取。这⼀次读取的⾸字符 是 . ,由于对应的占位符是 %f ,会读取到 .34e10,这是采⽤科学计数法的浮点数格式(是指0.34*10^10)。后⾯的 # 不属于浮点数的有效字符,所以会停在这⾥。 

4.2.3 scanf的返回值

scanf() 的返回值是⼀个整数,表⽰成功读取的变量个数。 如果没有读取任何项,或者匹配失败,则返回 0 。如果在成功读取任何数据之前,发⽣了读取错误或 者遇到读取到⽂件结尾,则返回常量EOF(EOF为-1)。

输完3个数时,按回车 

如果输⼊2个数后,按 ctrl+z ,提前结束输⼊: 

如果输⼊1个数后,按 ctrl+z ,提前结束输⼊: 

输入不符合要求的数据 

在VS中按3次 ctrl+z ,才结束了输⼊,直接按3次 ctrl+z ,输出的r是-1,也就是EOF

4.2.4  占位符

scanf常用占位符

%c :字符

 %d :整数。

 %f : float 类型浮点数。

%lf : double 类型浮点数。 

 %s :字符串。 

除了 %c 以外,都会⾃动忽略起⾸的空⽩字符。

占位符 %s ,从当前第⼀个⾮空⽩ 字符开始读起,直到遇到空⽩字符(即空格、换⾏符、制表符等)为⽌。 因为 %s 不会包含空⽩字符,所以⽆法⽤来读取多个单词,除⾮多个 %s ⼀起使⽤。意味着, scanf() 不适合读取可能包含空格的字符串,⽐如书名或歌曲名

4.2.5赋值忽略符

下图中,如果⽤⼾输⼊ 格式,⽐如 2023-3-2 ,就会正确解读出年、⽉、⽇。

但用户如果错误输⼊其他 2020/01/01 ,这种情况下, scanf() 解析数据就会失败。  

 

为了避免这种情况, scanf() 提供了⼀个赋值忽略符 只要把 * 加在任何占位符的百分号后⾯,该占位符就不会返回值,解析后将被丢弃。

%*c 就是在占位符的百分号后⾯,加⼊了赋值忽略符 * ,表⽰这个占位符没有对应的 变量,解读后不必返回 

好啦,关于scaanf函数的内容就结束了 

  • 21
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值