【C语法学习】10 - printf()函数

news2024/11/26 10:16:58

文章目录

  • 1 函数原型
  • 2 参数
    • 2.1 格式字符串
      • 2.1.1 字面文本量
      • 2.1.2 转义序列
      • 2.1.3 转换说明
        • 2.1.3.1 类型
        • 2.1.3.2 类型长度
        • 2.1.3.3 精度
        • 2.1.3.4 最小宽度
        • 2.1.3.5 标志
    • 2.2 参数列表
    • 2.3 转换说明和参数列表的关系
  • 3 返回值

1 函数原型

printf():将格式化输出发送至标准输出流stdout,函数原型如下:

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

2 参数

printf()函数的参数分为两类:

  1. format :格式字符串;
  2. … :参数列表。

2.1 格式字符串

在printf()函数中:

  1. 格式字符串是必不可少的;
  2. 格式字符串由字面文本量、转义序列和转换说明三部分组成。

2.1.1 字面文本量

在格式字符串中,除了转义序列和转换说明,剩余的部分都属于字面文本量,字面文本量按照原样显示在屏幕上,代码如下所示:

int main()
{
   int a = 11;

   printf("The value of a = %d\n", a);
   printf("\n");

   return 0;
}

上面代码中,printf()函数的格式字符串包括:

  1. 转义序列:‘\n’,换行符;
  2. 转换说明:“%d”,按十进制整数显示变量a的值;
  3. 字面文本量:"The value of a = ",即去除转义序列和转换说明后剩余的部分都属于字面文本量,需要保持原样输出。

2.1.2 转义序列

关于转义序列:

  1. 所谓转义,即转变字符的含义;
  2. 转义序列以反斜杠字符’'开头;
  3. 反斜杠’字符’告诉编译器以特殊的方式解释下一个字符。

转义序列有两个用途:

  1. 通过移动屏幕光标来控制输出的位置;
  2. 用于表示具有特殊含义的字符。

常用的转义序列如下图所示:

在这里插入图片描述

2.1.3 转换说明

转换说明以百分号字符’%'开头,格式如下:

%[flags][width][.prec][length]type <=> %[标志][最小宽度][.精度][类型长度]类型。
2.1.3.1 类型

类型是转换说明中比不可少的部分,用于指定printf()函数按照何种格式输出表达式的值,常用的类型如下图所示:

在这里插入图片描述

示例代码如下所示:

int main ()
{
   printf("以%%d形式打印有符号整数\n");
   printf("%d\n", -123);
   printf("\n");
   
   printf("以%%u形式打印无符号整数\n");
   printf("%u\n", 123);
   printf("\n");

   printf("以%%x/X形式打印无符号整数\n");
   printf("%x\t\t%X\n", 123, 123);
   printf("\n");

   printf("以%%f形式打印浮点数\n");
   printf("%f\n", 0.123456789);
   printf("\n");

   printf("以%%e/E形式打印浮点数\n");
   printf("%e\t%E\n", 0.123456789, 0.123456789);
   printf("\n");

   printf("以%%c形式打印字符\n");
   printf("%c\n", 65);
   printf("\n");

   printf("以%%s形式打印字符串\n");
   printf("%s\n", "Hello World!");
   printf("\n");

   printf("以%%p形式打印指针\n");
   printf("%p\n", "Hello World!");
   printf("\n");

   return 0;
}

代码运行结果如下图所示:

在这里插入图片描述

特别说明

  1. C编译器用双精度来表示浮点型常量;
  2. C编译器在打印浮点数时,默认会打印6位小数;
  3. C编译器在截断小数位时会进行四舍五入操作。
2.1.3.2 类型长度

在打印整形数据时,只有%d对应int型和%u对应unsigned int型,而没有与char、unsigned char、short、unsigned short、long、unsigned long、long long和unsigned long long等数据类型对应的转换说明类型。于是,类型长度应运而生,常用的类型长度如下图所示:

在这里插入图片描述

特别说明:与scanf()函数不同,在printf()函数中,无论float类型还是double类型,都使用%f格式进行输出,不存在%f对应float类型变量,%lf对应double类型变量的说法。

示例代码如下所示:

int main()
{
   printf("以%%hhd形式输出signed char\n");
   printf("signed char = %hhd\n", 0xff);
   printf("\n");

   printf("以%%hhu形式输出unsigned char\n");
   printf("unsigned char = %hhu\n", 0xff);
   printf("\n");

   printf("以%%hd形式输出signed short\n");
   printf("signed short = %hd\n", 0xffff);
   printf("\n");

   printf("以%%hu形式输出unsigned short\n");
   printf("unsigned short = %hu\n", 0xffff);
   printf("\n");

   printf("以%%ld形式输出signed long\n");
   printf("signed long = %ld\n", 0xffffffff);
   printf("\n");

   printf("以%%lu形式输出unsigned long\n");
   printf("unsigned long = %lu\n", 0xffffffff);
   printf("\n");

   printf("以%%lld形式输出signed long long\n");
   printf("signed long long = %lld\n", 0xffffffffffffffff);
   printf("\n");

   printf("以%%llu形式输出unsigned long long\n");
   printf("unsigned long long = %llu\n", 0xffffffffffffffff);
   printf("\n");

   return 0;
}

代码运行结果如下图所示:

在这里插入图片描述

2.1.3.3 精度

精度以小数点开头,后跟十进制整数,常用于指定浮点数的精度(小数点后数值位数),默认精度是6。

  1. 当浮点数的小数位数小于精度值时,在小数位填充至指定精度值;
  2. 当浮点数的小数位数大于精度值时,将小数位截断至指定精度值(四舍五入)。

示例代码如下所示:

int main()
{
   printf("默认精度\n");
   printf("Default precision = %f\n", 1000.123456789);
   printf("Default precision = %f\n", 1000.12345);
   printf("\n");

   printf("超过精度-截断\n");
   printf("More than specified precision = %.8f\n", 1000.123456789);
   printf("\n");

   printf("不足精度-填充\n");
   printf("Less than specified precision = %.8f\n", 1000.123456);   
   printf("\n");

   return 0;
}

代码运行结果如下图所示:

在这里插入图片描述

2.1.3.4 最小宽度

最小宽度用十进制整数来表示输出的最少位数,包括整数位、小数点和小数位。

  1. 若实际位数多于指定的宽度,则按实际位数输出;
  2. 若实际位数少于指定的宽度,则左侧填充空格输出(右对齐)。

示例代码如下所示:

int main()
{
   printf("输出整数-小于最小宽度\n");
   printf("Integer less than specified width = %6d\n", 123);
   printf("\n");

   printf("输出整数-大于最小宽度\n");
   printf("Integer more than specified width = %6d\n", 12300000);
   printf("\n");

   printf("输出浮点数-默认精度-小于最小宽度\n");
   printf("Float-point default   precision less than specified width = %10f\n", 1.23);
   printf("\n");

   printf("输出浮点数-默认精度-大于最小宽度\n");
   printf("Float-point default   precision more than specified width = %6f\n", 1.23);
   printf("\n");

   printf("输出浮点数-指定精度-小于最小宽度\n");
   printf("Float-point specified precision less than specified width = %10.3f\n", 1.23);
   printf("\n");

   printf("输出浮点数-指定精度-大于最小宽度\n");
   printf("Float-point specified precision more than specified width = %10.10f\n", 1.23);
   printf("\n");

   return 0;
}

代码运行结果如下图所示:

在这里插入图片描述

特别说明: 精度优先级高于最小宽度优先级,先将浮点数的小数位填充或截断至默认精度或指定精度,然后再考虑最小宽度。

2.1.3.5 标志

常用的标志如下图所示:
在这里插入图片描述

示例代码如下所示:

int main()
{
   printf("以16进制前缀形式显示整数\n");
   printf("%#x\n", 123);
   printf("%#X\n", 123);
   printf("\n");
   
   printf("指定最小宽度-默认右对齐-默认左侧填充空格\n");
   printf("%10d\n", 123);
   printf("%10f\n", 1.23);
   printf("\n");

   printf("指定最小宽度-默认右对齐-指定左侧填充数字0\n");
   printf("%010d\n", 123);
   printf("%010f\n", 1.23);
   printf("\n");

   printf("指定最小宽度-指定左对齐-右侧填充空格\n");
   printf("%-10d\n", 123);
   printf("%-10f\n", 1.23);
   printf("\n");

   return 0;
}

代码运行结果如下图所示:

在这里插入图片描述

2.2 参数列表

在printf()函数中:

  1. 参数列表是可选的;
  2. 参数列表中参数的数量是可变的;
  3. 参数列表中参数的类型是任意有效的C表达式

2.3 转换说明和参数列表的关系

  1. 转换说明和表达式在数量、顺序和类型上都要一一对应;
  2. 如果表达式比转换说明多,则未匹配的表达式无法打印出来;
  3. 如果转换说明比表达式多,则未匹配的转换说明打印出"垃圾值"。

示例代码如下所示:

int main()
{
   int a = 11;
   int b = 22;
   int c = 33;

   printf("表达式比转换说明多\n");
   printf("%d %d\n", a, b, c);
   printf("\n");

   printf("转换说明比表达式多\n");
   printf("%d %d %d %d\n", a, b, c);
   printf("\n");

   return 0;
}

代码运行结果如下图所示:

在这里插入图片描述

3 返回值

printf()函数的返回值类型为int型:

  1. 输出成功,返回输出的总字符数;
  2. 输出失败,返回一个负数。

C语言标准描述如下:

1. Each of these functions returns the number of characters printed, or a negative value if an error occurs.

示例代码如下所示:

int main()
{
   int ret_val = 0;

   printf("The return value of printf() function = %d\n", ret_val = printf("Hello World!\n"));
}

代码运行结果如下图所示:

在这里插入图片描述

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

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

相关文章

毅速丨3D打印在零件修复上潜力巨大

随着科技的飞速发展&#xff0c;3D打印技术逐渐渗透到各个领域&#xff0c;在零件修复方面&#xff0c;3D打印也展现出巨大的潜力和优势。 3D打印技术是一种基于数字模型文件的制造技术&#xff0c;采用逐层堆积材料的方式来制造物体。它具有制造复杂形状零件的能力&#xff0c…

腾讯云3年/5年特惠云服务器购买入口及攻略

腾讯云是腾讯旗下云计算品牌&#xff0c;为了吸引用户经常推出各种优惠活动&#xff0c;最吸引用户的还是特惠云服务器&#xff0c;下面给大家分享腾讯云3年/5年时长特惠服务器购买入口及教程&#xff01; 购买入口&#xff1a;传送门>>> 购买攻略&#xff1a; 进入…

阿里云免费服务器

文章目录 最近的阿里云活动By the way在云服务器ECS上搭建个人网站正文补充:定期释放补充:不知道阿里云服务器的密码怎么办?成果补充&#xff1a;怎么找到实例操作的后台&#xff1f;补充&#xff1a;怎么查看服务器到期时间&#xff1f; 究竟白嫖了多少&#xff1f;最后&…

TCP的滑动窗口和拥塞控制

目录 滑动窗口 1.发送窗口和接收窗口 2.滑动窗口的分类 停止等待协议&#xff1a;发送窗口大小 1&#xff0c; 接收窗口大小 1 后退N帧协议&#xff08;GBN&#xff09;&#xff1a;发送窗口大小 > 1&#xff0c;接收窗口大小 1 选择重传协议&#xff08;SR&#xf…

【计算机网络笔记】传输层——TCP的可靠数据传输

系列文章目录 什么是计算机网络&#xff1f; 什么是网络协议&#xff1f; 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能&#xff08;1&#xff09;——速率、带宽、延迟 计算机网络性能&#xff08;2&#xff09;…

逆袭Flutter? Facebook 发布全新跨平台引擎 Hermes!

Facebook 于前日发布了新的 JavaScript 引擎&#xff1a;Hermes&#xff0c;专注于提高 React Native 应用的性能&#xff0c;并且在市面上那些内存较少、存储速度较慢且计算能力低下的移动设备上都有良好的表现。但是不是为了追赶Flutter&#xff1f;这块作者没有说明。 移动应…

XXL-JOB默认accessToken身份绕过RCE漏洞复现 [附POC]

文章目录 XXL-JOB默认accessToken身份绕过RCE漏洞复现 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现 XXL-JOB默认accessToken身份绕过RCE漏洞复现 [附POC] 0x01 前言 免责声明&#xff1a;请勿利用文章内的相关技术从…

python模块的介绍和导入

python模块的介绍和导入 概念 在Python中&#xff0c;每个Python代码文件都是一个模块。写程序时&#xff0c;我们可以将代码分散在不同的模块(文件)中&#xff0c;然后在一个模块中引用另一个模块的内容。 导入格式 1、在一个模块中引用(导入)另一个模块可以使用import语句…

海康Visionmaster调试脚本:对脚本进行调试的方法

第一步&#xff0c;在脚本模块中使用导出工程功能&#xff0c;将模块中的代码导出 第二步&#xff0c;找到导出的工程&#xff0c;并打开 第三步&#xff0c;生成解决方案&#xff0c;设置断点&#xff0c;点击 VS 菜单调试中的附加到进程&#xff0c;选择 ShellModuleManage…

六氟化硫气体监测装置单位VOL%/LEL%/PPM分别是什么意思?

我们在使用六氟化硫等气体监测装置仪器时&#xff0c;经常看到VOL%、LEL%、PPM等单位&#xff0c;以及仪器中反复性、响应时间、灵敏度等这些词在气体检测仪中代表什么意思呢&#xff1f;今天主要给大家解释气体检测仪一些常见的单位及常用术语的意思。 一、常见单位 &#xff…

VSCode实用远程主机功能

作为嵌入式开发者&#xff0c;经常在各种系统平台或者开发工具之间切换&#xff0c;比如你的代码在Linux虚拟机上&#xff0c;如果不习惯在Linux下用IDE&#xff0c;那么我尝试将Linux的目录通过samba共享出来&#xff0c;在windows下用网络映射盘的方式映射出来&#xff0c;VS…

关于股价比较好的预测方案,仅供参考

1&#xff0c;导包 import pandas as pd import numpy as np import matplotlib.pyplot as plt import keras 2&#xff0c;读取数据 data pd.read_csv(000300.SH.csv) shszdata.rename(columns{收盘价(元):Close,"日期":"Date"}) 3&#xff0c;均值预测法…

代码随想录打卡第六十天|● 739. 每日温度 ● 496.下一个更大元素 I

739. 每日温度 题目&#xff1a; 给定一个整数数组 temperatures &#xff0c;表示每天的温度&#xff0c;返回一个数组 answer &#xff0c;其中 answer[i] 是指对于第 i 天&#xff0c;下一个更高温度出现在几天后。如果气温在这之后都不会升高&#xff0c;请在该位置用 0 来…

东北大学python大作业

目前金属矿开采&#xff0c;爆破还是主要的破岩方式&#xff0c;为了保证巷道采场的安全&#xff0c;需要对爆破震动进行监测&#xff0c;获取的监测数据如附件&#xff0c;第1列数据为震动的序号&#xff0c;第2、3、4列为x,y,z三个方向的震动速度&#xff0c;往往由于各种因素…

GNU ld 链接器lang_process() (一)

一、lang_process() 从现在开始介绍 lang_process()函数&#xff0c;是GNU ld&#xff08;GNU链接器&#xff09;的一个核心函数&#xff0c;负责执行链接过程中的各个关键操作。lang_process(void) 函数涵盖了整个链接过程中的各个关键步骤&#xff0c;包括符号解析、重定位、…

误删的文件恢复了成乱码 误删的文件恢复了成乱码怎么调整

电脑系统&#xff1a;Windows11 电脑型号&#xff1a;惠普 软件版本&#xff1a;EasyRcovery14 关于电脑&#xff0c;我们可以说是非常熟悉&#xff0c;并熟练掌握了对电脑的最基本操作&#xff0c;比如复制、粘贴、新建、删除文件。但我们真的很懂它吗&#xff1f;比如误删…

常见的单token登录方案

现在主流的单token方案为jwttoken和redis token 常用的跟jwt token集成框架有shrio、spring security、aop切面。redis也能跟这三者集成。跟redis相比&#xff0c;jwt token比较难注销&#xff0c;得等到有效期过了才行&#xff0c;实际根据项目需求来就行。 简单介绍如下&am…

奇偶校验码和循环冗余码

在数据链路层的传输中&#xff0c;1可能变成0&#xff0c;0可能变成1&#xff0c;这是比特差错。 为了应对比特差错&#xff0c;有两种方式&#xff0c;即自动重传请求ARQ&#xff08;Automatic Repeat-reQuest&#xff09;和前向纠错FEC&#xff08;Forward Error Correction&…

数字电路与逻辑设计 触发器

与非门构成的RS触发器 在这个中禁止RS 00 要记住s对应Q 或非门构成的RS触发器 注意这里的RS换了位置 且不允许RS 11 同步触发器 钟控RS触发器 钟控D触发器 cp 为 0 的时候不变 钟控JK触发器 00不变11改&#xff0c;JK不同随J摆 钟控T触发器 什么是空翻&am…