首页 > 其他分享 >学习C语言两个月后的收获(篇目二) #超详细的scanf() 讲解-->基本用法、scanf() 的返回值 、占位符、赋值忽略符

学习C语言两个月后的收获(篇目二) #超详细的scanf() 讲解-->基本用法、scanf() 的返回值 、占位符、赋值忽略符

时间:2024-06-15 21:02:16浏览次数:29  
标签:字符 -- scanf 占位 空白 C语言 数据 输入

一. scanf

1.基本用法:scanf() 读取用户的键盘输入  ----> 程序在运行到这个语句的时候,会停下来,等待用户从键盘输入。当用户输入数据之后按下回车,scanf() 就会处理用户的输入,将其存入变量。  scanf() 是库函数 ,其头文件是 <stdio.h>     

 (注:标准输入一般是键盘;标准输出一般是电脑屏幕)

   原理:用户输入的数据会先放入缓存(内存区域),等按下回车键之后,按照占位符对缓存进行解读 。解读用户数据时,会从上一次遗留的第一个字符开始,直到读完缓存,或者遇到第一个不符合条件的字符开始。如下面代码:

上述代码,scanf() 读取用户输入时,%d 表示整型,所以 %d 占位符读到 123 便停止了,因为后面的 . 并不属于整数的有效类型。当第二次调用scanf() 时,缓存中还剩下 .456s ,%f 是浮点型,只读 0.456 ,到s 便会停止,因为 s 不属于浮点型的有效字符。

                                                                           

2.scanf() 的第一个参数格式字符串 ,里面会放置占位符,用来告诉计算机用户输入的数据类型,其后计算机才能处理这些数据(与printf() 的占位符相似)

可以同时输入多个数据,但是输入时的格式要与格式字符串中的格式保持一致。

 请看下面代码:当数据连在一起的时候,计算机分辨不出这是一个数据还是多个数据,即使在格式字符串中"%d%d%d %d",但是数据之间要用空格(空白字符隔开)

空白字符隔开数据,计算机才知道数据是单独的

或者在知道单个数据数据的位数时(eg.个位)可以限制占位符的宽度

 只有scanf() 在处理非%c 类型的数据时,会主动跳过、过滤掉空白字符包括空格、制表符、换行符(即使按回车键将输入分为了几行,也不影响解读)等。

-->所以这也就是scanf() 不会读全带有空白字符的字符串的原因

除非搞多个scanf() 来读取

由上,我们可以得到 %s 的规则 从当前第一个空白字符开始读起,直到遇到空白字符(即空格、换行符、制表符等)才停止 --->  %s 不包含空格,就不适合读取带有空格的字符串。

scanf() 传递的不是值,而是地址,所以要在变量面前加上&,但如果变量本身就是指针,就不用加&。

int arr[]={1,2,3,4};
scanf("%d",arr); //数组名是该数组首元素的地址,为指针,故而不加&

TIps: 指针变量里面存放的是地址,表示指向这个存地址的数值。

3.scanf() 的返回值   <其返回值是整数,代表成功读取的变量个数>

简单来说就是,只要没有返回 -1 ,都表示scanf() 读取没有错误。若是scanf() 返回 0 则表示未读到任何项,若是返回整数,则代表了scanf() 成功读取的个数。

4.占位符: (占位符与printf() 相似)

%d  :整型

%s  :字符串

%f   : float 类型浮点数

%lf  : double 类型附浮点数

%Lf  : long double 类型浮点数

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

%c  : 字符。只要是字符,都会去读取(包括空白字符)

除了 %c ,其他的占位符都会自动忽略起首的空白字符。但是如果想要让%c 强制跳过起首的空白字符,就在 %c 前面添加一个空格,以表示跳过起首的零个或多个空白字符.

char ch = '0';
scanf(" %c", &ch )://若输入为 "      s"
printf("%c\n", ch ); //输出为 's'

注:为什么这里对 char 类型初始化用的是 ‘0’ ?因为字符本质上就是ASCII码值。

5.赋值忽略符 *

当要用户输入一个数据,然而这个数据的格式有多种表现形式,只想让scanf() 读取主要数据,而忽略格式,该怎么做?(eg.输入日期 年-月-日 or 年/月/日 or 年.月.日 等多种格式)

‘ * ’ ------>  赋值忽略符

%*c  ;在 占位符的% 后面添加一个 赋值忽略符 * ,表示 这个占位符没有对应的变量,解读后不必返回。简单来说就是这个占位符不会有返回值,解析后就被丢弃了。

标签:字符,--,scanf,占位,空白,C语言,数据,输入
From: https://blog.csdn.net/Distinguished_z/article/details/139664329

相关文章

  • 2023年03月一级
    青少年软件编程(图形化)等级考试试卷(一级)分数:100 题数:37一、单选题(共25题,共50分)1.    下列说法不正确的是?()A.           可以从声音库中随机导入声音B.           可以录制自己的声音上传C.           可以修改声音的大......
  • 2023年03月二级
    青少年软件编程(图形化)等级考试试卷(二级)分数:100 题数:37一、单选题(共25题,共50分)1.    小猫的程序如图所示,积木块的颜色与球的颜色一致。点击绿旗执行程序后,下列说法正确的是?( )A.           小猫一直在左右移动,嘴里一直说着“抓到了”。B.    ......
  • Java并行世界的钥匙:一文带你了解Java ForkJoin并行框架
    Fork/Join框架是Java7引入的一个并行计算框架,主要用于处理可以通过递归分解成更细小的任务的场景。其基本结构和工作流程可以从以下几个方面进行详细解析:核心类ForkJoinPool:这是一个线程池类,用于执行ForkJoinTask任务。ForkJoinWorkerThread:这是执行任务的具体线程实体......
  • 基于RandLA-Net深度学习模型的激光点云语义分割
    一、场景要素语义分割部分的文献阅读笔记        RandLA-Net是一种高效、轻量级的神经网络,其可直接逐点推理大规模点云的语义标签。RandLA-Net基于随机点采样获得了显著的计算和内存效率,并采用新的局部特征聚合模块有效地保留了几何细节,弥补了随机采样可能丢失关键特......
  • 张家口坝上草原旅游富民对策研究
    学士学位论文张家口坝上草原旅游富民对策研究论文题目:  在线评论质量对酒店消费决策的影响    学生姓名候文博学号201740542专业酒店管理指导教师张利娟职称讲师论文(设计)起止时间2023年11月01日—2024年6月15日选题来源教师科研......
  • 校园论坛圈子及信息聚合系统的设计与实现
    毕业论文(设计)校园论坛圈子及信息聚合系统的设计与实现学位论文原创性声明校园论坛圈子及信息聚合系统的设计与实现摘 要随着社会的飞速发展,我们也进入了一个更加激烈的信息化时代。在信息化、时代化加快的同时,相应的也产生了更多零碎化的信息。以校园为例,通过......
  • Java新纪元:深入探索Java 17的新特性与最佳实践
    一、主要新特性Java17作为Java的最新长期支持(LTS)版本,带来了许多新特性和改进。以下是对Java17新特性的详细探索,结合图文说明。密封类(SealedClasses)Java17引入了密封类,这是一种新的类定义方式,可以限制哪些其他类可以继承一个密封类。密封类的引入旨在解决Java中继承......
  • 能量项链(dp)
    题目描述在喵星星球上,每个喵星人都随身佩带着一串能量项链。在项链上有N颗能量珠。能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某个正整数。并且,对于相邻的两颗珠子,前一颗珠子的尾标记一定等于后一颗珠子的头标记。因为只有这样,通过吸盘(吸盘是喵星人吸收能量的一种......
  • 揭秘自动引流获客的软件:技巧与策略
    在数字营销的世界中,吸引潜在客户的注意力并促使他们采取行动是一项挑战。然而,通过精心设计的引流获客技巧,企业可以有效地将目标受众转化为忠实客户。以下是一些经过验证的策略和技巧,可以帮助您提高网站流量、提升品牌知名度,并将浏览器变成买家。 打造引人注目的内容是引流获......
  • 如何通过抖音自动评论精准获客实现业务增长?这些方法值得一试!
    在当今竞争激烈的商业环境中,企业若想脱颖而出,就必须掌握精准获客的艺术。精准获客,即通过精确的市场定位和营销策略,吸引并保留最有可能成为客户的目标群体。它不仅能提高转化率,还能有效降低营销成本,是推动业务增长的关键所在。以下是一些经过验证的方法,它们可以帮助企业实现精准......