9.2 scanf

本文详细介绍了VS2022中的scanf函数用法,包括基本用法、数值处理、返回值、占位符(如%c,%s,%d等)的特性,以及scanf_s的使用和安全注意事项。特别强调了输入格式匹配和赋值忽略符的使用。
摘要由CSDN通过智能技术生成

格式:

*使用的是VS2022,所以需要用到scanf_s 

9.2.1  基本用法

1.scanf()函数可以读取用户的键盘手动输入

  原型定义在头文件 stdio.h 中

  scanf()语法和printf()语法类似

eg.

scanf("%d",&a);

 2.scanf()函数一次可以输入多个变量

举个栗子:

 3.scanf()在处理数值占位符时,会自动过滤掉空白字符,包括空格、制表符、换行符等

比如:

4.scanf()处理用户输入的原理:用户的输入先放入缓存,等按下回车键,再按照占位符对缓存内容进行解读(遇到第一个不符合条件的字符就停止)

*补充:12e7==12*10的7次方

9.2.2 scanf的返回值

1.scanf()的返回值是一个整数,表示成功读取的变量个数。

如果没有读取任何项,或者匹配失败,返回0;

如果在成功读取任何数据之前,发生了读取错误或者遇到读取到文件结尾,则返回常量EOF(EOF=-1)故最后结果返回-1。

举个栗子:

1)在VS中按三下ctrl+z ,才结束输入

2)如果一个数字都不输入,直接按3次ctrl+z,输出的r是-1,也就是EOF。

2.输入的格式(和中英文标点符号)要与占位符的格式(和中英文标点符号)相同才能输出正确的值!

1) 格式错误

2)中英文标点符号不同

3)正确格式

 9.2.3 占位符

scanf()常用的占位符如下,与printf()的占位符基本一致。

•%c:字符。

• %s:字符串。

•%d:整数。

•%f:float 类型浮点数。

• %lf:double 类型浮点数。

•%Lf:long double 类型浮点数。

•%[ ]:在方括号中指定一组匹配的字符 (比如 %[0-9〕) ,遇到不在集合之中的宇符,匹配将会停止。


1.%c的特殊用法

上面所有占位符之中,除了%c 以外,都会自动忽略起首的空白字符。%c 不忽略空白字符,总是返回当前第一个字符,无论该字符是否为空格。

%d举例 

输入时前面有空格,但%d不读取空格,所以输出时没有空格

%c举例

输入时前面有空格,而%c读取空格,所以输出为空格

如果要强制跳过字符前的空白字符

可以写成 scanf(" %c",&ch),即%c 前加上一个空格,表示跳过零个或多个空白字符。

2.%s的特殊说明

它其实不能简单地等同于字符串。

它的规则是:从当前第一个非空白宇符开始读起,直到遇到空白字符(即空格、换行符、制表符等)为止。

1) %s无法读取空格,所以无法读入多个单词。除非多个%s一起用。

所以canf()不适合读取可能包含空格的宇符串,比如书名或歌曲名。

另外,scanf()遇到 %s 占位符,会在字符串变量未尾存储一个空字符 \0。

2)scanf()将字符串读入字符数组时,不会检测字符串是否超过了数组长度。(这也是scanf()不安全的原因)

所以,储存字符串时,很可能会超过数组的边界,导致预想不到的结果。为了防止这种情况,使用%s 占位符时,应该指定读入字符串的最长长度,即写成%[m]s,其中的[m]是一个整数,表示读取字符串的最大长度,后面的字符将被丢弃。

9.2.4 赋值忽略符

由9.2.2.1得,在使用scanf()时输入格式要与占位符的格式相同,但我们很难时刻做到这一点,为了方便,scanf()提供了一个赋值忽略符 *。只要把*加在任何占位符的百分号后面,该占位符就不会返回值,解析后将被丢弃。

没有赋值忽略符之前:

有赋值忽略符之后


 

▲关于scanf与scanf_s的用法解释

scanf_s是VS 2022 中提供的,C语言不提供。所以其他编译器无法识别scanf_

▲scanf在VS中的正确用法:

在代码的第一行写#define _CRT_SECURE_NO_WARNINGS 1

▲Q:每次写这一行太不方便,有什么方法自定加呢?

A:首先我们要了解VS在新建文件时,都是拷贝newc++file.cpp 这个文件。

所以如果我们在newc++file.cpp文件的第一行加上#define _CRT_SECURE_NO_WARNINGS 1 这句话,那么以后新建的文件中自然就有这句代码了!!

▲具体步骤:

推荐一个软件:Everything(用来搜索文件)

在Everything中搜索 newc++file.cpp (路径为VS2022)

用记事本打开

在第一行写上#define _CRT_SECURE_NO_WARNINGS 1

保存ctrl+s

新建VS文件时,要打开显示紧凑视图来建立C++文件!

▲VS认为不安全的函数还有:

strcpy

strcat

weixin151云匹面粉直供微信小程序+springboot后端毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
weixin295微信小程序选课系统+ssm后端毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值