C语言的scanf输入函数的介绍分享

各位少年:

我来分享一个输入函数,scanf函数 是输入的函数,scanf(“参数1”,参数2);好,我们接着看代码的例子

int main()
{
int score=0;
printf("请输入成绩:");
scanf("%d",&score);//请输入成绩 取地址这个必须&有(除了数组),大家记住即可
printf(“%d”,score);//打印成绩
}

这是输入输出的过程,接下来介绍scanf基本的用法

scanf()函数用于读取用户的键盘输入。

程序运行到这个语句时,会停下来,等待用户从键盘输入,用户输入数据,按下回车键后

scanf就会处理用户的输入,将其存入变量,他的原型定义在stdio头文件上,scanf和printf用法基本一致。(看代码例子)

scanf(“%d”,&i);

它的第一个参数是一个格式字符串,里面会放置占位符(与printf()的占位符基本一致),告诉编译器如何解决用户的输入,需要提取的数据是什么类型。

这是因为C语言的数据都是有类型的,scanf()必须提前知道用户输入的数据类型,才能处理数据

它的其余参数就是存放用户输入的变量,格式字符串里面有多少个占位符,就有多少个变量。

上面示例中,scanf()的第一个参数%d,表示用户输入应该是一个整数,%d就是一个占位符,%是占位符的标志,d表示整数。第二个参数&i表示,将用户从键盘输入的整数存入变量i。

注意:变量前面必须加上&运算符(指针变量外),因为scanf()传统不是值,而是地址,即使变量i的地址指向用户输入的值。

如果这里的变量是指针变量(比如字符串变量),那就不用加&运算符。

顺带一提 scanf_s函数是Vs提供的函数,并非C语言提供的,如果你在代码中使用scanf_s那么其他编译器可能不认识这个函数,scanf_s这个函数是什么是 VS提供的一个库函数 VS认为这个scanf这个函数并不安全,导致使其无法使用,哪VS就不能用了吗?你只需要在VS编译器第一行声明这段代码即可 使用Scanf

#define _CRT_SECURE_NO_WARNINGS

好,我们稍微了解一下,scanf的特性,看一段代码。

#include<stdio.h>
int main()
{
char arr[5]={0};
scanf("%d",arr);
printf("%s\n",arr);return 0;
}

这是一个数组,各位少年可能没见过 大家只要知道这个数组里只能存储五个字符就好了, 但是你输出10个字符照样给你打印出来,所以说scanf不管你,输入什么,都给你打印出来,另外我前面介绍scanf的时候是不是要加个取地址,但是这块没有,因为数组本身就是地址,大家先记住就好了

#include<stdio.h>
int main()
{
int a=0;
int b=0;
float c=0.0;
doble d=0.0;
scanf("%d%d%f%lf",&a,&b,&f,&d);
printf("%d %d %f $lf\n",a,b,f,d);return 0;
}

这是介绍如何打印浮点型和多精度浮点型的scanf使用方法,scanf处理数值占位符时,会自动过滤空白字符,包括空格,制表符,换行符等。

我们再来看一段代码

#include<stdio.h>
int main()
{int x;float y;scanf("%d", &x);printf("%d\n", x);scanf("%f", &y);printf("%f\n", y);return 0;
}

输入13.55e12#0 ,13存进x里,然后算出 55乘10的12幂,这块考的是大家科学计数法的掌握

55乘与10的十二次方,然后#就不是浮点数了,直接待在缓冲区里头。

#include<stdio.h>
int main()
{int a = 0;int b = 0;int c = 0;int r = scanf("%d %d %d", &a, &b, &c);printf("%d", r);return 0;
}

这里r的值,是scanf的函数返回值,成功输入进去几个返回值就是几,这里只给了三个值,如果输入第四个值,他就会待在缓冲区里头,因为不管输出几个返回值都是3.,剩下的介绍一下,scanf使用问题,注意的事项,看代码

#include<stdio.h>
int main()
{
int a=0;
int b=0;
int c=0;
scanf("%d,%d,%d",&a,&b,&c)
printf("%d,%d,%d",&a,&b,&c);
return 0;
}

 这块三个占位符每个都隔开逗号,所以说我们输入的时候必须也逗号隔开,不然我们无法打印,所以说不建议大家这么使用

还记得我们说过scanf会忽略非输入字符吗?这里补充一点也不绝对 比如说%c

#include<stdio.h>
int main()
{
char ch=0;
int a=20;
scanf("%d",&a);
printf("%d\n",a);return 0;
}

看执行结果

这是执行的结果,会自动忽悠空格,但是打印的时候,空格也算字符,大家知道就好

如果强制跳过字符前的空白字符,可以写成scanf(“5c",&ch);,即%c的加上一个空格,表示跳过零个或多个空白字符

下面要特别说一下占位符%是它其实不能简单地等同于字符串。它的规则是,从当前第一个非空白字符开始读起,直到遇到空白字符(即空格,换行符,制表符等)为止

因为%s不会包含空白字符,所以无法用来读取多给单词,除非多个%s一起使用。这意味着,scanf()不适合读取可能包含空格的字符串\0。

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

#include<stdio.h>
int main()
{
char name[11];
scanf("%10s",name);return 0;
}

上面代码中,name是一个长度为11的字符数组,scanf()的占位符%10s表示最多

不管你输入是什么打印出来四个,因为还有一个斜杠0,斜杠0是字符结尾标志

赋值忽略符

有时,用户的输入可能不符合预定的格式。

#include<stdio.h>
int main()
{
int year=0;
int month=0;
int day=0;
scanf("%d-%d-%d",&year,&month,&day);
printf("%d-%d-%d",&year,&month,&day);
return 0;
}

上面示例中,如果用户输入2020-01-01,就会正确解读出年月日。问题是用户可能输入其他格式,比如2020/01/01,这种情况下,scanf()解析数据会失败 。

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

int main()
{
int year=0;
int month =0;
int day=0;
scanf("%d%*c%d%*c%d,&year,&month,&day);
printf("5d %d %d\n",year,month,day);
return 0;
}

他们可以理解为读取一个字符,然后再取掉,不打印,即可,好了这篇文章分享到这里 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/238984.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android应用-flutter使用Positioned将控件定位到底部中间

文章目录 场景描述示例解释 场景描述 要将Positioned定位到屏幕底部中间的位置&#xff0c;你可以使用MediaQuery来获取屏幕的高度&#xff0c;然后设置Positioned的bottom属性和left或right属性&#xff0c;一般我们left和right都会设置一个值让控制置于合适的位置&#xff0…

【Amazon 实验②】Amazon WAF功能增强之使用Cloudfront、Lambda@Edge阻挡攻击

文章目录 一、方案介绍二、架构图三、部署方案1. 进入Cloud9 编辑器&#xff0c;新打开一个teminal2. 克隆代码3. 解绑上一个实验中Cloudfront 分配绑定的防火墙4. 使用CDK部署方案5. CDK部署完成6. 关联LambdaEdge函数 四、方案效果 一、方案介绍 采用 LambdaEdge DynamoDB 架…

第一部分 数理逻辑

目录 什么是命题 注意&#xff1a; 例1 下列句子中那些是命题&#xff1f; 联结词 例2 将下列命题符号化. 注意&#xff1a; 例4 设 p&#xff1a;天冷&#xff0c;q&#xff1a;小王穿羽绒服&#xff0c;将下列命题符号化 例5 求下列复合命题的真值 例如 真值表: 例&#xff1…

OpenHarmony 4.0 Release发布,同步升级API 10

不久之前&#xff0c;OpenHarmony 正式发布了4.0 版本&#xff0c;开发套件也同步升级到 API 10。相比 3.2 Release 版本&#xff0c;4.0 版本新增 4000 多个 ArkTS API&#xff0c;应用开发能力更加丰富&#xff1b;HDF 新增 200 多个 HDI 接口&#xff0c;硬件适配更加便捷&a…

深度学习数据处理(一)

在PyTorch中&#xff0c;torch.Tensor是存储和变换数据的主要工具。如果你之前用过NumPy&#xff0c;你会发现Tensor和NumPy的多维数组非常类似。然而&#xff0c;Tensor提供GPU计算和自动求梯度等更多功能&#xff0c;这些使Tensor更加适合深度学习。 张量&#xff08;tensor&…

基于ssm+jsp理发店管理系统源码和论文

随着信息化时代的到来&#xff0c;管理系统都趋向于智能化、系统化&#xff0c;理发店管理系统也不例外&#xff0c;但目前国内的市场仍都使用人工管理&#xff0c;市场规模越来越大&#xff0c;同时信息量也越来越庞大&#xff0c;人工管理显然已无法应对时代的变化&#xff0…

【万能技巧】IP知识速通与小技巧~

本文目录 前言一、网络代理IP简介二、IPIDEA 优势2.1 多种类型IP代理2.2 海量纯净代理池2.3 稳定高效数据收集架构 三、IP实操小Tips3.1 查看本地网络IP3.2 使用浏览器IP3.3 使用IPIDEA进行爬虫实操 前言 各位友友&#xff0c;大家好&#xff0c;马上就到2024年了&#xff0c;…

[Angular] 笔记 6:ngStyle

ngStyle 指令: 用于更新 HTML 元素的样式。设置一个或多个样式属性&#xff0c;用以冒号分隔的键值对指定。键是样式名称&#xff0c;带有可选的 .<unit> 后缀&#xff08;如 ‘top.px’、‘font-style.em’&#xff09;&#xff0c;值为待求值的表达式&#xff0c;得到…

【泛型中K T V E? Object等分别代表什么含 义】

✅ 泛型中K T V E? Object等分别代表什么含义 ✅ 典型解析✅代码示例 ✅ 典型解析 E - Element (在集合中使用&#xff0c;因为集合中存放的是元素) T-Type (Java 类) K- Key (键) V - Value (值) N - Number (数值类型) ? - 表示不确定的iava类型 (无限制通配符类型) …

鸿蒙和各大厂合作,是不是要火起来

今年9月底&#xff0c;在华为秋季全场景新品发布会上&#xff0c;华为常务董事、终端BG CEO余承东宣布&#xff0c;鸿蒙原生应用全面启动&#xff0c;HarmonyOS NEXT开发者预览版将在2024年第一季度开放。 近日&#xff0c;腾讯、阿里、美团、网易&#xff0c;外包大厂中软国际…

微信小程序购物车页面实现

目录 32.商品加入购物车逻辑实现&#xff08;前端&#xff09; 33.购物车页面收货地址实现 34.购物车商品列表显示实现 37.购物车商品复选框选中业务处理 38.购物车全选复选框选中业务处理 39.购物车商品数量编辑实现 40.购物车商品数量为0判定是否删除 42.商品详情立即…

只更新软件,座椅为何能获得加热功能?——一文读懂OTA

2020年&#xff0c;特斯拉发布过一次OTA更新&#xff0c;车主可以通过这次系统更新获得座椅加热功能。当时&#xff0c;这则新闻震惊了车圈和所有车主&#xff0c;彼时的大家还没有把汽车当作可以“升级”的智能设备。 如今3年过去了&#xff0c;车主对各家车企的OTA升级早已见…

FCIS 2023网络安全创新大会-核心PPT资料下载

一、峰会简介 本次会议的主题是“AI大模型、人工智能与智能制造安全、攻击面管理与供应链安全”。 1、AI大模型 会议首先探讨了AI大模型在网络安全领域的应用。AI大模型是一种基于深度学习的模型&#xff0c;具有强大的特征提取和分类能力&#xff0c;可以用于检测和防御各种…

Unity3D移动端实现摇一摇功能

手机摇一摇功能在平时项目开发中是很常见的需求&#xff0c;利用Unity的重力感应可以很方便的实现该功能。 Unity简化了重力感应的开发&#xff0c; 通过访问Input.acceleration属性&#xff0c;取回加速度传感器的值。首先我们看一下重力传感器的方向问题。Unity3D中重量的取…

四、Spring IoC实践和应用(基于注解方式管理 Bean)

本章概要 基于注解方式管理 Bean 实验一&#xff1a; Bean注解标记和扫描 (IoC)实验二&#xff1a; 组件&#xff08;Bean&#xff09;作用域和周期方法注解实验三&#xff1a; Bean属性赋值&#xff1a;引用类型自动装配 (DI)实验四&#xff1a; Bean属性赋值&#xff1a;基本…

在MacOS上Qt配置OpenCV并进行测试

一.Qt环境准备 上一篇博客我讲了如何下载配置OpenCV库&#xff0c;但是在Qt5.15.2使用OpenCV库时&#xff0c;出现了一个问题就是我下载的Qt5.15.2是x86架构的&#xff0c;不能对OpenCV库进行链接&#xff0c;而OpenCV库是arm架构的 直接使用Qt5.15.2编译链接OpenCV库链接头文件…

千帆 AppBuilder 初体验,不仅解决解决了我筛选简历的痛苦,更是让提效10倍!

文章目录 &#x1f31f; 前言&#x1f31f; 什么是百度智能云千帆 AppBuilder&#x1f31f; 百度智能云千帆 AppBuilder 初体验&#x1f31f; 利用千帆AppBuilder搭建简历小助手&#x1f31f; 让人眼前一亮的神兵利器 - 超级助理 &#x1f31f; 前言 前两天朋友 三掌柜 去北京…

PostGIS学习教程十四:更多的空间连接

PostGIS学习教程十四&#xff1a;更多的空间连接 在上一节中&#xff0c;我们看到了ST_Centroid(geometry)和ST_Union([geometry])函数&#xff0c;以及一些简单的示例。在本节中&#xff0c;我们将用它们做一些更详细的事情。 提示&#xff1a;写完文章后&#xff0c;目录可以…

Jmeter 性能 —— 监控服务器!

Jmeter监控Linux需要三个文件 JMeterPlugins-Extras.jar (包&#xff1a;JMeterPlugins-Extras-1.4.0.zip)JMeterPlugins-Standard.jar (包&#xff1a;JMeterPlugins-Standard-1.4.0.zip)ServerAgent-2.2.3.zip 1、Jemter 安装插件 在插件管理中心的搜索Servers Performan…

MySQL运维实战(1.2)安装部署:使用二进制安装部署

作者&#xff1a;俊达 引言 上一篇我们使用了RPM进行安装部署&#xff0c;这是一种安装快速、简化部署和管理过程、与操作系统提供的包管理工具紧密集成的部署方法。此外&#xff0c;当你需要更高的灵活性和自定义性&#xff0c;并且愿意承担一些额外的手动配置和管理工作&am…