C语言萌新如何使用printf函数?

news2024/9/24 12:28:55

🐎作者的话
如果你搜索输入输出函数,那么你会看到输入输出流、Turbo标准库、标准输出端、stdout什么什么乱七八糟的,作为一个萌新,哪懂这些?
本文介绍萌新在前期的学习中,常用的输入输出函数及其功能~


跳跃式目录

    • printf介绍
    • 宽度介绍
    • 精度介绍
    • 标识介绍
      • 减号
      • 加号
      • 井号
      • 数字0
    • printf的返回值
    • 打印练习


printf介绍

函数原型: int printf(参数1,参数2,参数3,参数4,参数~,参数n)
这就是对于我们萌新来说的函数原型,有许许多多的参数,返回值是int类型。

参数1: 参数1是一个字符串,printf会打印这个字符串,你可以直接用双引号引着放进去,也可以存在一个字符数组里,然后把数组的首地址放进去,像这样:

int main()
{
	printf("太阳出来我晒太阳!!!");

	char str[] = "月亮出来我晒月亮喽~";
	printf(str);

	return 0;
}

运行效果图:
在这里插入图片描述
可以看到,两个字符串都被打印了。

但是,我们可能要打印我们自己也不知道是多少的变量,这要怎么办呢?

这时候,就需要在参数1的str中加入一些控制符,即"%"加一个或两个字母,在str中每多了一个"%"加字母的组合,后面就要多一个参数,至于这个字母,根据输出变量的类型不同,字母也会不同。

常见字母请看以下表格:

%字母对应变量类型
%dsigned int
%uunsigned int
%o八进制unsigned int
%x(%X)十六进制unsigned int
%cchar
%sstring(字符串)
%p地址(指针)
%ffloat
%lfdouble
%e(%E)以指数表示的浮点型

注意: 不是说某种类型只能用某种控制符输出,而且会把你一会放在后面的参数,当成这种控制符对应的类型输出。

比如说: 你用%u输出了一个signed型的数,那么计算机在读取这个数时,会把它当成unsigned来读取。

为了应对各种不同的情况,在"%"和字母之间,会选择性地加入三个参数,这三个参数分别叫做标识、宽度、.精度

其中,标识必须紧挨在"%"的右边宽度紧挨在标识的右边.精度在宽度和字母的中间(精度前面有一个小小的点,这不是博主手误哦,真正存在的),像这样:

int main()
{
	printf("%标识宽度.精度d" );
	return 0;
}

宽度介绍

  • 宽度可以是一个数,也可以是一个星号"*"。
  • 如果是一个数,假设是5,那么就代表接下来输出的这个数的宽度至少有5,像这样:
int main()
{
	int a = 12;
	printf("%5d",a );
	return 0;
}

效果图:
在这里插入图片描述
可以看到,被灰色框起来的,就是宽度为5。

那么星号,就是为了应对不知道该输出多宽的数据,以一个参数变量当作数据的宽度,如果写了星号,在后面加入变量时要多一个,而且必须写在第一位,像这样:

int main()
{
	int a = 12;
	printf("%*d",5,a );
	printf("%*d", 10, a);
	return 0;
}

效果图:
在这里插入图片描述
宽度一共就这两种,值得注意的是宽度不能用于控制字符串的长度哦,控制字符串长度要用我们接下来开始介绍的精度。

精度介绍

  • 精度要紧挨在字母的左边,而且精度的左边还要加上一个点。

  • 在这个点的右边,你可以写一个数字或者一个星号,没错,和宽度一样。

  • 顾名思义,是用来控制输出数据的精度的,只是对于不同的控制符,有不同的效果。
    PS:刚才说过,控制符就是一个%号加是一或两个字母,不要忘了哦。

详细效果:
对于%d(signed int)、%u(unsigned int)、%o(八进制unsigned int)、%x(十六进制unsigned int),这四个来说,是表示数据输出的最小位数,像这样:

int main()
{
	int a = 12;
	printf("%.*d", 4, a);
	return 0;
}

效果图:

在这里插入图片描述
因为精度是4,所以至少输出四位,不足则前导0补充。

精度不会缩小一个整数的输出,像这样:

int main()
{
	int a = 12345;
	printf("%.*d", 4, a);
	return 0;
}

效果图:
在这里插入图片描述

标识介绍

  • 接下来我们介绍最复杂的标识。

  • 标识写在紧挨在%的右边,可以写“-”、“+”、“#”、0,即减号,加号,井号,还有数字0

减号

和宽度配合使用,表示左对齐,如果不加减号,默认右对齐,像这样:

int main()
{
	int a = 42;
	printf("%10d",a);

	printf("%-10d", a);
	return 0;
}

打印结果如下:
在这里插入图片描述
可见,两者宽度都是10,但一个向左对齐,一个向右对齐。

加号

写上加号,即使是正数,也会显示一个"+",像这样:

int main()
{
	int a = 42;
	printf("%+d",a);
	return 0;
}

效果图:
在这里插入图片描述
如果不写这个加号,只有负数会显示负号,正数不显示加号。

井号

众所周知(即使是萌新也应该知道),八进制要前导0,十六进制前导0x,二进制前导0b,井号的作用就是显示八进制和十六进制的前导标志,像这样:

int main()
{
	int a = 0x00001234;
	printf("%#x",a);
	printf("\n");
	printf("%x", a);
	return 0;
}
}

效果图:
在这里插入图片描述
如图,加了井号的显示了前导标志。

数字0

数字0和宽度配合使用,它可以让数据的前面不再补充空格,反而补充0,像这样:

int main()
{
	int a = 555;
	printf("%10d", a);
	printf("\n");
	printf("%010d", a);

	return 0;
}

效果图:
在这里插入图片描述
在宽度前面多加一个0,就能让它补充0了。

printf的返回值

前面我们说到,printf函数的返回值是一个int类型的数,这个数是printf函数打印出来的字符数,如果没能成功打印,就返回一个负数,像这样:

int main()
{
	int a = 1234;
	int tmp = printf("%010d", a);

	printf("\n");
	printf("%d", tmp);
	return 0;
}

效果图:
在这里插入图片描述
可以看到,我们打印了十个字符,那么它的返回值就是10。

打印练习

以下五个练习,你能写出打印内容吗?

  1. int a=15; printf("%#x", a);
  2. int a=4; printf("%10.*d", a, a);
  3. int a=4; printf("%u",a);
  4. int a = 6; printf("%-*d",a,a);
  5. int a = 8; printf("%+.*d",a,a);

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

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

相关文章

【Python标准库】LZ77编码的基本原理和lzma模块

文章目录lz77编码lzma模块调用lz77编码 Python标准库总共提供了三种压缩算法,分别是zlib, bz2以及lzma,并且位这三个模块提供了高度相似的API,考虑到zlib中已经对很多定义做了详尽的解读,本文主要介绍一下lzma算法,然…

vue使用rem, vscode使用px to rem工具

一、使用px2rem-loader实现pxtorem 1、安装 首先,我们使用 vue 的脚手架 vue-cli 初始化一个 webpack 项目(前提是已经安装过 vue-cli,具体不再阐述),一些选项根据自己项目需要选择。 vue init webpack my-app命令执…

深度学习算法数据-网络-算法总结

深度学习算法数据-网络-算法总结 1 数据集大全 通用2D检测数据集、交通标志、车道线、行人检测、3D目标检测、ReID等数据集 2 Backbone知识汇总 该部分主要是针对常见CNN结构以及ViT结构进行汇总,同时也包含轻量化CNN Backbone以及轻量化Transformer模型等高性…

详解pandas的read_excel函数

一、官网参数 pandas官网参数网址:pandas.read_excel — pandas 1.5.2 documentation 如下所示: 二、常用参数详解 1、io 一般指读取文件的路径。【必须指定】 import pandas as pddf pd.read_excel(r"C:\Users\wwb\Desktop\data3.xlsx")p…

chromecast激活

小白误入旁路由添加dns解析(1)外部网络设置不动,内部网络设置第一个dns服务器指向旁路由自己,第二个dns服务器用常用的保证能用就行(2)添加dns解析,把安卓ntp,更新时间的服务器链接成…

一文读懂CPU工作原理、程序是如何在单片机内执行的、指令格式之操作码地址码

文章较长,大家可选择性阅读,嘎嘎细 计算机结构 CPU的运行原理 CPU的控制单元在时序脉冲的作用下,将指令计数器里所指向的指令地址(这个地址是在内存里的)送到地址总线上去,然后CPU将这个地址里的指令读到指令寄存器进行译码。由运算器执行对应的机器指令,并将结果通过地…

如何用C++扩展NodeJS的能力?

文章目录前言C结合NodeJS的魅力C和NodeJS怎么结合通过Addon增强NodeJS环境的准备1. node-gyp2. nan (Native abstraction for NodeJS)编写Addon的C代码JS方法的C表示JS方法的传入参数 v8::Argument进阶进阶1: 输出一个JS包装类型进阶2: 使用多线程异步计算最后前言 Javascript…

Qt使用第三方库QXlsx将数据库的数据导出为Excel表格

一、参考和下载第三方库QXlsx 参考1 这篇博客对第三方库QXlsx介绍的比较详细。 1、概述 QXlsx是一个可以读写Excel文件的库。不依赖office以及wps组件,可以在Qt5支持的任何平台上使用。 2、使用方式 (1) QXlsx可以编译为静态库库使用(可以提升项目编…

第03讲:使用kubeadm搭建k8s单master集群方案

一、安装前的准备工作 本实验使用1个master节点和2个node节点。 硬件配置(必要):2GB 或更多 RAM,2 个 CPU 或更多 CPU,硬盘 30GB 或更多 开始本实验之前请先按照 使用kubeadm搭建k8s集群的准备工作 进行实验前的准备工…

从零开始带你实现一套自己的CI/CD(五)Jenkins+K8s

目录一、简介二、Jenkins K8s2.1 Jenkins配置k8s-master服务器信息2.2 配置镜像仓库信息2.3 编写k8s yaml文件2.4 将yaml文件推送到k8s2.5 配置免密钥登录2.6 k8s部署yaml资源文件2.7 重新部署yaml资源文件2.8 构建注意事项2.9 完整Jenkinsfile2.10 构建成功三、Webhook源码一…

合宙ESP32S3 CameraWebServe 测试demo

合宙ESP32S3 CameraWebServe 合宙ESP32S3 CameraWebServe测试,我们需要一个OV2640的摄像头模组用来采集图像传输给ESP32的,这里使用的OV2640是之前安信可十周年的白嫖的。现在直接插到合宙ESP32S3开发板,简直完美。还是白嫖好!&a…

评估-----评估算法的指标

评估算法的优劣一般会用到以下参数: TN: 真反例 FN: 假反例 TP: 真正例 FP: 假正例 正样本负样本预测正样本TPFP预测负样本FNTN**精确率/查准率(precision):**预测正确的正样本个数与预测为正样本的个数的…

【NI Multisim 14.0虚拟仪器设计——放置虚拟仪器仪表(函数发生器)】

目录 序言 🍍放置虚拟仪器仪表 🍉函数发生器 序言 NI Multisim最突出的特点之一就是用户界面友好。它可以使电路设计者方便、快捷地使用虚拟元器件和仪器、仪表进行电路设计和仿真。 首先启动NI Multisim 14.0,打开如图所示的启动界面&am…

3-Spring创建

目录 1.创建一个普通的Maven项目 2.添加Spring框架支持(spring-context,spring-beans) 3.添加启动类 1.创建一个普通的Maven项目 不选择任何模板,直接点Next。 Name:项目名称; Location:项目保存路径; …

Lesson 3. 线性回归的手动实现(3.1 变量相关性基础理论 3.2 数据生成器与 Python 模块编写)

文章目录一、变量相关性基础理论二、数据生成器与 Python 模块编写1. 自定义数据生成器1.1 手动生成数据1.2 创建生成回归类数据的函数2. Python 模块的编写与调用在此前的内容当中,我们已经学习了关于线性回归模型的基本概念,并且介绍了一个多元线性回归…

看了以后大呼过瘾的程序员必备网站,速速收藏!

程序员必备的网站,网络上一搜一大把,动辄几十个甚至一百个,虽说大多数网站也都是实用的,但数量庞杂未免让人眼花缭乱。 这里我就只挑选精华,只挑选出程序员必备的8个网站,服务于程序员的工作&生…

Python和MySQL对比(5):用Pandas实现MySQL窗口函数的效果

文章目录一、前言二、语法对比数据表row_number()lead()/lag()rank()/dense_rank()first_value()count()/sum()三、小结一、前言 环境: windows11 64位 Python3.9 MySQL8 pandas1.4.2 本文主要介绍 MySQL 中的窗口函数row_number()、lead()/lag()、rank()/dense_ran…

工业互联网蓬勃发展,出奇才能制胜

近年来,随着我国工业数字化转型的快速推进,我国工业发展进入产业新阶段,工业互联网迎来更加强劲的发展动能和更加广阔的发展空间,我国希望把握住新一轮的科技革命和产业革命,推进工业领域实体经济数字化、网络化、智能…

Cassandra入门教程

文章目录一、数据存储方式和NoSQL1.1 数据存储方式1.2 NoSQL概述1.3 NoSQL的分类二、Cassandra的介绍2.1、Cassandra概述2.1.1 来自百科的介绍2.1.2 Cassandra的Logo2.2、Cassandra特点2.3、Cassandra使用场景2.3.1 特征2.3.2 场景举例三、Cassandra下载、安装、访问3.1 Cassan…

Datawhale 吃瓜教程组队学习 task01

Datawhale 吃瓜教程组队学习task01 还没写完,会持续更新~~ 上个月看了周志华老师的机器学习视频课的前三章,但是后面中断了没看…(主要是懒🤐) 于是打算这个月继续来学习西瓜书和南瓜书🤯 Task01:概览西瓜书南瓜书第1、…