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

news2025/2/1 8:03:26

各位少年:

我来分享一个输入函数,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.coloradmin.cn/o/1329403.html

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

相关文章

关于YOLOv5的训练,GPU单卡、多卡设置,加速训练

yolov5毫无疑问是目前目标检测框架中非常准确快速的检测框架之一&#xff0c;在工业界和学术界应用广泛&#xff0c;其优势不言而喻。 在模型训练或推理时&#xff0c;我们都想快速完成&#xff0c;特别是数据量很大的时候&#xff0c;效率就是非常迫切需要提升的。这里简单介…

【MAC、IOS】charles抓包配置教程,亲测有效

&#x1f4e2;专注于分享软件测试干货内容&#xff0c;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;交流讨论&#xff1a;欢迎加入我们一起学习&#xff01;&#x1f4e2;资源分享&#xff1a;耗时200小时精选的「软件测试」资…

Python并行编程详解:发挥多核优势的艺术

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com 在当今计算机时代&#xff0c;充分发挥多核处理器的性能是提高程序运行效率的关键。Python作为一门强大的编程语言&#xff0c;提供了多种并行编程工具和库。本文将深入介绍Python中的并行编程&#xff0c;探讨如…

再也不怕合照缺人,Anydoor为图片编辑开了一道「任意门」

原文&#xff1a;再也不怕合照缺人&#xff0c;Anydoor为图片编辑开了一道「任意门」 「能不能把这张图里的产品&#xff0c;都放到另一张图的桌子上&#xff1f;」 面对这样的要求&#xff0c;设计师肯定会脑瓜嗡嗡的。 把指定物品放进另一张图片不像贴张贴纸一样简单&#x…

java 项目日记实现两种方式:拦截器方式实现日记与定义日记注解方式实现日记

通常只要是java web项目基本都离不开项目日记&#xff0c;项目日记存在的意义很多&#xff0c;例如&#xff1a;安全审计&#xff0c;问题追踪都离不开项目日记。下面我们说一下项目日记实现最常用的两种方式 。 一 拉截器实现项目日记 1 实现一个拦截器基类&#xff0c;用于事…

c++打开网页

1.使用ShellExecute 效果图&#xff1a; 相关代码: void Open_url::on_pushButton_clicked() {QString path1 "explorer.exe";QString urlui->lineEdit->text();ShellExecute(NULL, L"open", path1.toStdWString().c_str(), url.toStdWString().c…

Ubuntu环境下使用Livox mid 360

参考文章&#xff1a; Ubuntu 20.04使用Livox mid 360 测试 FAST_LIO-CSDN博客 一&#xff1a;Livox mid 360驱动安装与测试 前言&#xff1a; Livox mid360需要使用Livox-SDK2&#xff0c;而非Livox-SDK&#xff0c;以及对应的livox_ros_driver2 。并需要修改FAST_LIO中部…

【科学计算语言】实验三 Python复杂数据类型

【目的和要求】 &#xff08;1&#xff09;掌握Python语言中的组合数据类型 &#xff08;2&#xff09;掌握列表、元组、字典、集合及字符串的基本应用 &#xff08;3&#xff09;熟练运用有关序列操作的Python内置函数 【实验准备】 【实验内容】 1. 实验练习&#xff1a;掌握…

SpringIOC之MethodBasedEvaluationContext

博主介绍&#xff1a;✌全网粉丝5W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…

三个月真的可以学会自动化测试吗?不是骗局把?

三个月可以学会&#xff0c;但是想要达到精通还需更多的时间。 目前行业内对于自动化测试的还是存在很多误区的&#xff0c;管理层为了自动化而去自动化&#xff0c;学习者学到最后只会用一些工具。 关于学习路线&#xff0c;我放在后面讲&#xff0c;在此之前必须先聊一下行…

【Python小知识 - 6】:QLabel设置图片

文章目录 QLabel设置图片 QLabel设置图片 from PyQt5.QtWidgets import * from PyQt5.QtGui import * import sysapp QApplication(sys.argv)window QWidget()hbox QHBoxLayout(window)# 设置标签图片 lable QLabel() lable.setPixmap(QPixmap(./img/window.png).scaled(1…

算法基础之表达整数的奇怪方式

表达整数的奇怪方式 中国剩余定理: 求M 所有m之积 然后Mi M / mi x 如下图 满足要求 扩展中国剩余定理 找到x **使得x mod mi ai**成立 对于每两个式子 都可以推出①式 即 用扩展欧几里得算法 可以算出k1,-k2和m2–m1 判无解 : 若**(m2–m1) % d ! 0** 说明该等式无解 …

分子生成工具 - ResGen 评测

ResGen 模型是浙江大学药学院侯廷军老师课题组2023年发表在nature machine intelligence期刊上文章Nature Machine Intelligence | Volume 5 | September 2023 | 1020–1030&#xff0c;题目为&#xff1a;《ResGen is a pocket-aware 3D molecular generation model based on …

OpenFeign 万字教程详解

OpenFeign 万字教程详解 目录 一、概述 1.1.OpenFeign是什么&#xff1f;1.2.OpenFeign能干什么1.3.OpenFeign和Feign的区别1.4.FeignClient 二、OpenFeign使用 2.1.OpenFeign 常规远程调用2.2.OpenFeign 微服务使用步骤2.3.OpenFeign 超时控制2.4.OpenFeign 日志打印2.5.O…

垃圾回收器和内存分配

垃圾回收器和内存分配策略 概述 垃圾回收&#xff08;Garbage Collection&#xff09;简称GC&#xff0c;早在Lisp还在胚胎时期时&#xff0c;其作者John McCarthy就思考过垃圾回收需要完成的三件事情&#xff1a; 哪些内存需要回收 什么时候回收 如何回收 今天的内存动态…

PHP下载安装以及基本配置

目录 引言 官网 下载 配置 1. 鼠标右键“此电脑”>“属性” 2. 打开高级系统设置 3. 打开环境变量 4. 双击系统变量中的path 5. 新建新的path 6. 将刚刚安装的位置加入环境变量 7. 检查是否安装成功 引言 PHP&#xff08;"PHP: Hypertext Preprocessor"…

OCC:第一个程序,对话框中显示一个BOX

1. OCC库的获取 从github上获取 gitgithub.com:tpaviot/oce.git&#xff0c;自己编译官网获取二进制包&#xff08;获取下来的只有release 版本的&#xff0c;而且VS版本不一定适合自己&#xff09;官网源码&#xff0c;然后自己编译&#xff08;稍微折腾点&#xff0c;建议按…

【Java】IO流相关操作

目录 常见的文件操作 创建文件 得到文件信息 目录操作 IO流 FileInputStream FileOutputStream FileReader FileWriter BufferedReader BufferedWriter ObjectOutputStream ObjectInputStream InputStreamReader OutputStreamReader PrintStream PrintWriter Properties prope…

【JAVA面试题】基本类型的强制类型转换是否会丢失精度?引用类型的强制类型转换需要注意什么?

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a; JAVA ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 思路 1、继承关系 2、运行时类型检查 结语 我的其他博客 前言 在Java编程中&#xff0c;强制类型转换是一个常见的操作&#xf…

鸿蒙应用开发ArkTS容器组件的使用

线性布局——Column/Row 线性布局是应用中最常用的布局&#xff0c;通过线性容器 Row 和 Column 构建 线性布局是其他布局的基础&#xff0c;其子元素在水平方向和垂直方向依次排列 线性布局的排列方向由所选容器组件决定&#xff0c;Column 容器内子元素按照垂直方向排列&a…