scanf与printf函数的用法

news2024/9/20 20:43:20

前言:

学习c语言编程,必不可少的操作就是键盘输入与屏幕输出。今天我想讲讲自己对scanf与printf使用的看法

一、scanf与printf:

1.scanf()函数:

int scanf ( const char * format, ... );

        函数的功能:从标准输入中读取格式化数据

        从 stdin 读取数据,并根据参数格式将它们存储到附加参数所指向的位置(目标对象的地址)。

        其他参数应指向格式字符串中相应格式说明符指定的类型的已分配对象。

        scanf的使用需要引 头文件:#include <stdio.h>

示例1:

#include <stdio.h>
int main()
{
	int n = 0;
	scanf("%d", &n);//此时我就需要从键盘上输入一个数,然后把它存放到变量n里(&:是取地址符)
	return 0;
}

        值得注意的是,输入参数的时候一定要加上取地址符,这是初学者很容易忘的。

        &n:读作取地址n,意思就是把你输入的数据存放到n的地址中

示例2:

#include <stdio.h>
int main()
{
	int m = 0;
	int n = 0;
	scanf("%d %d", &m,&n);//此时我就需要从键盘上输入一个数,然后把它存放到变量n里(&:是取地址符)
	printf("%d,%d\n", m, n);
	return 0;
}

        仔细观察上方代码,我定义了两个变量,我在输入的时候,中间的输入格式中间加了个空格。

双引号内部,就是格式化你输入的数据。

        意思也就是说你在代码中怎么样格式化的数据,你在 控制面板 的 输入时候也要一模一样的按照格式化的模式 进行输入,要不然程序就无法很好地运行。

 这张图片是我按照正确的方式来运行的:

这张图片是个错误示范:

 此图片的意思是说,我本来想要打印2和3,但是由于我2和3当时没有用空格分开,然后我一直输入3,一直输入3,然后直到按下了回车键,他才给我打印出来23和3的结果。

以下是scanf 的格式说明符遵循以下原型:

大家可以参考了解一下

        另外需要注意的是

        1.在c语言程序中,我们从键盘上输入的都是字符,比如说我们在键盘上输入123,但是,,它表示的并不是数字 123,而是字符 ‘1’、字符 ‘2’ 和字符 ‘3’。所以我们需要格式化你输入的字符。

       2. 比如说上方表格中的%d,它在scanf中,就表示将你输入的字符格式化化为十进制数字。从键盘上输入字符 123,然后%d将这三个字符转化成十进制数 123。

        3.在这里我只是单独举了一个例子,其他符号还有其他的作用。

        4.还有一点就是最好不要在scanf中添加中文。

2.printf()函数:

int printf ( const char * format, ... );

        此函数的功能:将格式化数据打印到标准输出

        将按格式指向的 C 字符串写入标准输出 (stdout)。如果 format 包含格式说明符(以 % 开头的子序列),则格式后面的其他参数将被格式化并插入到生成的字符串中,替换其各自的说明

格式化输出,请参考表格:

格式说明符还可以包含子说明符标志宽度.precision 和修饰符(按此顺序),它们是可选的,并遵循以下规范:

 

 最重要的也是最容易被遗忘的点来啦:

 printf的返回值:

1.成功后,将返回写入的字符总数!!!(参见链式访问)

2.如果发生写入错误,则设置错误指示器(ferror)并返回负数。

3.如果在写入宽字符时发生多字节字符编码错误,errno 将设置为 EILSEQ 并返回负数。

示例 printf的链式访问:

#define _CRT_SECURE_NO_WARNINGS 1 
#include <stdio.h>
int main()
{
	printf("%d", printf("%d", printf("%d", 43)));
	return 0;
}

小伙伴们可以猜一猜这里面打印的最终结果是什么呢?

 

 就有人奇怪了,为什么打印的结果是4321啊?

因为如果printf返回值返回成功的话,它会返回 你 写入字符的总个数

        我们来剖析一下这个程序:最内层是打印了43。等到下一步他开始打印的时候,他写入了几个字符==就是上一步打印的4和3,总共打印了两个字符,所以说他会返回2。在走到最后一步他要打印的时候,他上一步写入了几个字符==就是上一步返回的2呀,所以说就打印了一个字符,最终就返回1。(所以说最终的结果就是4321)

那么好了好了,关于printf的返回值  重要的事情说三遍:

printf返回成功后,将返回写入的字符总个数!!!

printf返回成功后,将返回写入的字符总个数!!!

printf返回成功后,将返回写入的字符总个数!!!

 OK,关于printf和scanf的介绍就简单介绍到这里了.

如果对你有帮助,记得点赞👍+关注哦!
我的主页还有其他文章,欢迎学习指点。关注我,让我们一起学习,一起成长吧!

 

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

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

相关文章

契约锁亮相华为2023中国合作伙伴大会,共谱华为云软件生态新篇章

5月8日-9日&#xff0c;以“因聚而生 众志有为”为主题的“华为中国合作伙伴大会2023”在深圳举行。契约锁作为华为云优秀软件伙伴&#xff0c;受邀参会并在“聚数字化先行者&#xff0c;谱软件生态新乐章”分论坛开展“让数字可信&#xff0c;打通数字化最后一公里”数字化实践…

Google Play 政策更新重点回顾 (下) | 2023 年 4 月

Google Play 和您一样&#xff0c;始终坚持为用户提供更优质的产品、更流畅的体验。为持续打造值得信赖的优质应用平台&#xff0c;我们也在不断进行政策更新。在上一篇文章中与您回顾了 2023 年 4 月 Google Play 政策的更新要点&#xff0c;这篇文章我们将为您带来重点政策解…

golang汇编之常量和全局变量(三)

常量 Go汇编语言中常量以$美元符号为前缀。常量的类型有整数常量、浮点数常量、字符常量和字符串常量等几种类型。以下是几种类型常量的例子&#xff1a; $1 // 十进制 $0xf4f8fcff // 十六进制 $1.5 // 浮点数 $a // 字符 $"abcd" …

【加解密篇】Passware Kit Forensic暴力美学-已知部分密码自定义解密详细参数设置

【加解密篇】Passware Kit Forensic暴力美学-已知部分密码自定义解密详细参数设置 都说"自制武器不一定是最强的&#xff0c;但最强的武器一定是自制的"&#xff0c;对于取证工具也是一样&#xff0c;虽然默认配置足够强&#xff0c;但如果我们能根据实时情景自定义…

arduino 导入 Brain 库

一、引言 最近在做一个可以用脑电波控制的arduino小车&#xff0c;需要用到Brain这个库&#xff0c;而且需要自己导入才能使用。之前试了很多方法&#xff0c;导入成功了&#xff0c;过了几个月又忘记怎么导入了&#xff0c;今天想起来记录一下&#xff0c;好记性不如烂笔头。 …

LNK2019 无法解析的外部符号,一种新的思路

LNK2019 无法解析的外部符号&#xff0c;一种新的思路 一般来说&#xff0c;这种问题的原因有如下几点&#xff1a; 函数只有声明没有实现如果是其它库的函数&#xff0c;可能没有链接lib文件如果函数是封装在dll中的&#xff0c;可能没有导出如果是模板函数或模板类&#xf…

初始MyBatis,w字带你解MyBatis

一.什么是mybatis mybatis的概念 MyBatis 是一款优秀的持久层框架&#xff0c;它支持定制化 SQL、存储过程以及高级映射。1、Mybatis是一个半ORM&#xff08;对象关系映射&#xff09;框架&#xff0c;底层封装了JDBC&#xff0c;是程序员在开发时只需要关注SQL语句本身&#…

U-boot顶层Makefile文件分析(一)

在阅读 uboot 源码之前&#xff0c;肯定是要先看一下顶层 Makefile&#xff0c;分析 gcc 版本代码的时候一定是先从顶层 Makefile 开始的&#xff0c;然后再是子 Makefile&#xff0c;这样通过层层分析 Makefile 即可了解整个工程的组织结构。顶层 Makefile 也就是 uboot 根目录…

界面控件DevExpress WPF MessageBox组件,进一步增强用户体验!

在DevExpress WPF v22.2版本中&#xff0c;官方引入了一系列功能来帮助改进一个常见WPF UI元素——MessageBox的用户体验&#xff0c;新的MessageBox相关选项包括&#xff1a; 文本选择支持自定义图像支持带有计时器的按钮&#xff0c;可以自动关闭窗口 ThemedMessageBox类允…

OJ练习第103题——最大矩形

最大矩形 力扣链接&#xff1a;85. 最大矩形 题目描述 给定一个仅包含 0 和 1 、大小为 rows x cols 的二维二进制矩阵&#xff0c;找出只包含 1 的最大矩形&#xff0c;并返回其面积。 示例 输入&#xff1a;matrix [[“1”,“0”,“1”,“0”,“0”],[“1”,“0”,“1”…

数据库管理-第七十四期 我的Oracle ACE之路(20230511)

数据库管理 2023-05-11 第七十四期 我的Oracle ACE之路1 差点错过2 ACE Associate3 一路走来总结 第七十四期 我的Oracle ACE之路 “终于等到你&#xff0c;还好我没放弃”。经过了整整4个月20天的等待&#xff0c;我终于收到了Oracle ACE Associate的确认邮件&#xff0c;成为…

『python爬虫』17. 线程池和进程池以及线程池实战(保姆级图文)

目录 1. 线程池和进程池解决的是调度问题2. 线程池3. 线程池实战&#xff1a;爬取西游记的标题总结 欢迎关注 『python爬虫』 专栏&#xff0c;持续更新中 欢迎关注 『python爬虫』 专栏&#xff0c;持续更新中 1. 线程池和进程池解决的是调度问题 ⽹站的数据太多了&#xff0…

典型随机噪声激励

1.按噪声的起源分类 根据噪声的起源&#xff0c;分为内部噪声和外部噪声。 内部噪声&#xff1a;来源于系统内部的涨落运动或被检测信号&#xff0c;如布朗粒子受到周围液体分子的无规则碰撞即为内部噪声&#xff1b; 外部噪声&#xff1a;来自系统所处外部环境的随机涨落&…

endNote X9 导入英文文献(谷歌学术、web of science 等)

文章目录 1 导入英文文献&#xff08;谷歌学术、web of science 等&#xff09;2 EndNote X9 插入参考文献常见问题总结3 EndNote X9 快速上手教程&#xff08;毕业论文参考文献管理器&#xff09; 1 导入英文文献&#xff08;谷歌学术、web of science 等&#xff09; 谷歌学术…

Vite如何实现秒级依赖预构建的能力

大家都知道, Vite是一个提倡 no-bundle 的构建工具,相比于传统的 Webpack,能做到开发时的模块按需编译,而不用先打包完再加载。这一点我们在快速上手这一节已经具体地分析过了。 需要注意的是,我们所说的模块代码其实分为两部分,一部分是源代码,也就是业务代码,另一部…

线性代数——特征值与特征向量的性质

&#xff08;1&#xff09;设A为方阵&#xff0c;则A与 A T A^{T} AT有相同的特征值。 此处用到了两个关键性质&#xff0c;一&#xff1a;单位阵的转置为其本身,二&#xff1a;转置并不改变行列式的值。 &#xff08;2&#xff09;&#xff1a; 设n阶方阵A&#xff08; a i j…

汽车电子的电磁兼容性分析

随着电子技术的不断发展&#xff0c;新技术越来越多的应用到汽车领域&#xff0c;因此各个电子装置和电子控制系统必须相互适应&#xff0c;这就是电磁兼容性(EMC)要求。为了保证汽车可靠性&#xff0c;设计师必须在早期设计阶段分析电磁兼容性问题。目前市场上推出了一些电磁兼…

jdk20-虚拟线程简单了解

普通线程 JDK中的普通线程和操作系统线程是一对一关系的&#xff0c;存在映射关系&#xff1b;由操作系统进行调度&#xff0c;线程过多&#xff0c;会引起操作系统频繁调度&#xff0c;导致线程上下文切换太过频繁&#xff0c;反而会降低系统性能&#xff1b;线程越多&#x…

即时通讯私有化部署有哪些优势?企业在选择时需要考虑哪些因素?

即时通讯私有化部署是一种将即时通讯系统部署在企业的私有服务器上&#xff0c;以保护企业的信息安全和隐私。相比于使用Saas部署即时通讯应用程序&#xff0c;私有化部署可以更好地保护企业的机密信息&#xff0c;避免信息泄露的风险。 在即时通讯私有化部署中&#xff0c;企业…

半导体热处理设备微环境中的精密微正压控制解决方案

摘要&#xff1a;针对半导体热处理设备微环境中的微正压精密控制&#xff0c;本文分析了现有技术造成微正压控制不稳定的原因&#xff0c;提出了相应的解决方案。解决方案主要是采用绝对电容真空计替代压差计&#xff0c;采用真空低漏率的高速电动针阀和电动球阀替代气体质量流…