C语言printf函数-程序员宅基地

技术标签: C语言  c语言  后端  # C语言基础  printf  开发语言  

C语言printf函数

printf函数简介

printf是C语言格式化输出函数,用于将格式化后的字符串输出到标准输出。标准输出,即标准输出文件,对应终端的屏幕。

printf申明于头文件#include <stdio.h>。函数原型:int printf(const char * format, ...);

返回值: 正确返回输出的字符总数,错误返回负值,与此同时,输入输出流错误标志将被置值,可由指示器ferror来检查输入输出流的错误标志。

调用格式: printf函数的调用格式为:printf("格式化字符串",输出表列)。

格式化字符串包含三种对象,分别为: 

  1. 字符串常量。
  2. 格式控制字符串。
  3. 转义字符。 

字符串常量原样输出,在显示中起提示作用。输出表列中给出了各个输出项,要求格式控制字符串和各输出项在数量和类型上应该一一对应。其中格式控制字符串是以%开头的字符串,在%后面跟有各种格式控制符,以说明输出数据的类型、宽度、精度等。


printf函数格式控制字符串详解

printf的格式控制字符串组成: %[flags][width][.prec][length]type

分别代表为:%[标志][最小宽度][.精度][类型长度]类型。


类型(type)

首先说明类型,因为类型是格式控制字符串的重中之重,是必不可少的组成部分,其它的选项都是可选的。type用于规定输出数据的类型,含义如下:

占位符 对应数据类型 含义 示例
%d int 输出int类型十进制数据。

 printf("%d",2147483647);//输出2147483647

%i int

输出int类型十进制数据。

 printf("%i",2147483647);//输出2147483647

%o

unsigned int

输出unsigned int类型八进制数据。

printf("%o",4294967295);//输出37777777777

%u unsigned int 输出unsigned int类型十进制数据。 printf("%u",4294967295);//输出4294967295

%x

unsigned int

输出unsigned int类型十六进制数据,字母部分是小写。

printf("%x",4294967295);//输出ffffffff

%X unsigned int 输出unsigned int类型十六进制数据,字母部分是大写。 printf("%X",4294967295);//输出FFFFFFFF
%f float 输出float类型十进制数据。 printf("%f",0.000001);//输出0.000001
%lf double 输出double类型十进制数据。 printf("%lf",0.000001);//输出0.000001
%F float(double)

输出float和double类型十进制的INFINITY和NAN数据。 

printf("%F %F",INFINITY,NAN);//输出INF NAN

%e float(double) 输出float和double类型十进制科学计数数据,e是小写。

printf("%e",0.000001);//输出1.000000e-006

%E float(double) 输出float和double类型十进制科学计数数据,e是大写。

printf("%E",0.000001);//输出1.000000E-006

%g float(double)

输出float和double类型十进制数据,根据数据的长度选择%f或%e方式输出。

printf("%g %g",0.000001,0.1);//输出1e-006 0.1

%G float(double) 输出float和double类型十进制数据,根据数据的长度,选择%f或%E方式输出。 printf("%G %G",0.000001,0.1);//输出1E-006 0.1
%c char 输出char类型数据。

printf("%c",'A')//输出A

%s char* 输出char*类型数据,直至输出到'\0'字符。

printf("%s","A");//输出A

%S/%ls wchar_t* 输出wchar_t*类型数据,直至输出到'\0'字符。 printf("%S %ls",L"A",L"A");//输出A A
%p void* 输出void*类型十六进制数据。

printf("%p","A");//输出00405064

%n int* 不输出任何数据。%n对应的参数是一个指向int的指针,在此之前输出的字符数将存储到指针所指的位置。

int num=0;
printf("0123%n",&num);//输出0123

printf("%d",num);//输出4

%% char 输出char类型%数据本身。

printf("%%");//输出%

%m 打印errno值对应的出错内容。 printf("%m\n");
%a float(double) 输出float和double类型十六进制p计数法数据,字母部分是小写。

printf("%a",0.000001);//输出0x1.0c6f7ap-20

%A float(double) 输出float和double类型十六进制p计数法数据,字母部分是大写。 printf("%A",0.000001);//输出0X1.0C6F7AP-20

注: 格式控制字符串除了指明输出的数据类型,还可以包含一些其它的可选的格式说明,依序有 flags, width, .precision and length。下面一一讲解。


标志(flags)

flags规定输出样式,取值和含义如下:

字符 说明 示例
- 输出结果左对齐,不足右边补空格。 printf("%-2d%2d",1,1);//输出1  1
+ 输出符号(正号或负号) printf("%+d %+d\n",1,-1);//输出+1 -1
space 输出值为正时加上空格,为负时加上负号 printf("% d % d\n",1,-1);//输出 1 -1
# type是%o或%x或%X时,输出增加前缀。
type是%f或%lf或%e或%E或%g或%G或%a或%A时,输出增加小数点。
type是%g、%G时,输出增加后面的0。

具体示例看下面图片。

0 输出结果前面补上0。 printf("%02d",1);//输出01



输出最小宽度(width)

用十进制整数来表示输出的最少位数。若实际位数多于指定的宽度,则按实际位数输出,若实际位数少于定义的宽度则补以空格或0。width的可能取值如下:

width 说明 示例
数值 输出结果右对齐,不足左边补空格。 printf("%2d",1);//输出 1
* 不指明输出最小宽度,而是以星号代替,在printf的输出参数列表中给出。 printf("%*d",2,1);//输出 1

精度(.precision)

精度格式符以.开头,后跟十进制整数。可取值如下:

.precision 描述 示例
.数值 十进制整数。
type是%d或%i或%o或%u或%x或%X时,precision表示输出的最小的数字个数,不足补前导零,超过不截断。
type是%f或%lf或%e或%E或%a或%A时,precision表示小数点后数值位数,默认为六位,不足补后置0,超过则截断。
type是%g或%G时,precision表示可输出的最大有效数字。
type是%s时,precision表示最大可输出字符数,不足正常输出,超过则截断。
precision不指明则默认为0
具体示例看下面图片。
.* 不指明输出精度,而是以星号代替,在printf的输出参数列表中给出。 printf("%.*d",2,1);//输出01

注:在对浮点数和整数截断时,存在四舍五入。 


类型长度(length)

类型长度指明待输出数据的长度。因为相同类型可以有不同的长度,比如整型有16bits的short int,32bits的int,也有64bits的long int,浮点型有32bits的单精度float和64bits的双精度double。为了指明同一类型的不同长度,于是,类型长度(length)应运而生,成为格式控制字符串的一部分。

这里写图片描述

注:黄色背景行标识的类型长度说明符和相应的数据类型是C99标准引入的。

 

注: long int到底是32bits还是64bits跟生成的程序是32bits还是64bits一一对应,如果使用g++编译程序的话,可通过-m32-m64选项分别生成32bits和64bits的程序。因本人测试代码编译生成的是64bits的程序,所以long int也就是64btis。


转义字符

转义字符在字符串中会被自动转换为相应操作命令。printf()使用的常见转义字符如下:

转义字符 意义
\a 警报(响铃)符
\b 回退符
\f 换页符
\n 换行符
\r 回车符
\t 横向制表符
\v 纵向制表符
\\ 反斜杠
\” 双引号

欢迎大家来加我自己的编程语言交流QQ群群号:387618421

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/vbnetcx/article/details/119855229

智能推荐

ASP.NET服务端不装Office 操作Excel NPOI 3_.net excel类库 不需要安装office-程序员宅基地

文章浏览阅读2.7k次。作者:Tony QuNPOI官方网站:http://npoi.codeplex.com/ 在Excel中我们经常要设置格式,比如说日期格式(yyyymmdd)、小数点格式(1.20)、货币格式($2000)、百分比格式(99.99%)等等,这些东西在过去我们恐怕只能在服务器端生成好,不但增加了服务器端的代码量,还造成了不必要的字符串替换操作,如今NPOI将让服务器从这种完全_.net excel类库 不需要安装office

漏损分析指标定义(部分)_漏损控制 夜间最小流量-程序员宅基地

文章浏览阅读2.4k次,点赞2次,收藏6次。指标定义1) 最小夜间流量(MNF)(m3/h)最小夜间流量:在凌晨02:00 - 05:00 点间,最小瞬时流量。 滚动1小时最小夜间流量:当采集数据每小时大于1个,取其中最小的瞬时流量。 2)固定1小时最小夜间流量:当采集数据每小时1个时,取最小的瞬时流量。2)净夜间流量 (m3/h): 常用算法:净夜间流量 =前七天MNF平均流值-3倍前七天MNF标准差净夜间流量 = AVERAGE (MNF[7])-3*STDEVP(MNF[7]) 经验算法净夜间..._漏损控制 夜间最小流量

内网渗透 - 代理篇(CobaltStrike代理)_crodstrike杀毒使用代理-程序员宅基地

文章浏览阅读5.4k次,点赞2次,收藏16次。希望你每天醒来都是阳光的,不会因为别人的几句话、几个表情和几个举止,影响自己的心情,好好生活,总会遇见美好的事。。。---- 网易云热评​声明:贝塔安全实验室公众号文章来自团队核心成员和知识星球成员,少部分文章经过原作者授权和其它公众号白名单转载。未经授权,严禁转载!请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与文章作者及本公众号无关!本次所使用的攻击机为kali linux系统,攻击过程中涉及到的工具主要有:proxychains,nmap等。攻击的拓扑结构如下图.._crodstrike杀毒使用代理

《信点开机CindinStarter》多重引导管理器-程序员宅基地

文章浏览阅读322次,点赞8次,收藏7次。信点开机CindinStarter》是一款电脑多重操作系统引导启动管理器,适用于移动办公、应急启动、备份还原、装机维护、形象定制、软件测试等诸多应用场景。启动ISO、IMG、WIM等格式的WinPE、Deepin Live、DOS等装维、体验系统(支持自定义增减);透明源代码、纯净不植入、无广告、类固件、不崩溃、安全舒心,还可用于学习研究;支持扩展ISO、IMG、WIM、VHD、VHDX等格式的第三方或自制系统。支持应急启动、一键装机、一键备份、一键还原、一键移植,而无需专业知识;

Sublime Text下载安装教程非常详细)从零基础入门到精通,看完这一篇就够了-程序员宅基地

文章浏览阅读1.6w次,点赞20次,收藏71次。网络安全行业产业以来,随即新增加了几十个网络安全行业岗位︰网络安全专家、网络安全分析师、安全咨询师、网络安全工程师、安全架构师、安全运维工程师、渗透工程师、信息安全管理员、数据安全工程师、网络安全运营工程师、网络安全应急响应工程师、数据鉴定师、网络安全产品经理、网络安全服务工程师、网络安全培训师、网络安全审计员、威胁情报分析工程师、灾难恢复专业人员、实战攻防专业人员…网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我自己录的网安视频教程,上面路线图的每一个知识点,我都有配套的视频讲解。_sublime text

电网的正序参数和等值电路(一)-程序员宅基地

文章浏览阅读756次,点赞9次,收藏21次。本篇为本科课程《电力系统稳分析》的笔记。本篇为第二章的第一篇笔记。电力系统正常运行中,可以认为系统的三相结构和三相负荷完全对称。而对称三相的计算可以用一相来完成,其中所有给出的标称电压都是线电压的有效值,假定系统全部是Y-Y型连接,不是Y-Y型连接的全部要变换成Y-Y型连接,在这种情况下线电压为相电压的3\sqrt{3}3​倍,即U˙L=3U˙P\dot{U}_L=\sqrt{3}\dot{U}_PU˙L​=3​U˙P​,而线电流等于相电流,即I˙L=I˙P\dot{I}_L=\dot{I}_PI˙L​=I

随便推点

PHP 安装PHPStorm完成后 配置php命令 及 安装Composer_phpstorm 安装composer-程序员宅基地

文章浏览阅读1w次,点赞2次,收藏11次。一、配置php命令cmd php -v报错'php' 不是内部或外部命令,也不是可运行的程序 或批处理文件。浪费时间原因:没理解应该php版本,环境变量应该配置php 而不是 phpstorm解决:使用的php时xampp,环境变量配置F:\Xampp\php二、安装Composer Composer安装后的目录为:C:......\AppData\Roaming..._phpstorm 安装composer

Mybatis + mysql获取元数据时出现问题以及解决_mybatis 数据库表元数据-程序员宅基地

文章浏览阅读772次。Mybatis + mysql获取元数据时出现问题以及解决_mybatis 数据库表元数据

HP 打印机驱动下载_打印机驱动下载 csdn-程序员宅基地

文章浏览阅读802次。https://h30318.www3.hp.com/pub/softlib/software13/printers/COL71129/Full_Webpack-44.11.2775-LJM129-M134_UW_4_1_Full_Webpack.exe_打印机驱动下载 csdn

Java-JDK动态代理-程序员宅基地

文章浏览阅读5.9k次,点赞7次,收藏16次。介绍:我们需要掌握的程度动态代理(理解) 基于反射机制掌握的程度:1.什么是动态代理?2.动态代理能够做什么?后面我们在用Spirng和Mybatis的时候,要理解怎么使用的.代理,在我们日常生活之中就有体现,代购,中介,换ip,商家等等.比如有一家美国的大学,可以对全世界招生.留学中介(代理 )留学中介(代理):帮助这家美国的学校招生,中介是学校的代理中介是代替学校完成招生功能代理特点中介和代理他们要做的事情是一致的:招生中介是学校代理,学校是目标。_jdk动态代理

回归预测 | MATLAB实现基于QPSO-GRU、PSO-GRU、GRU多变量回归预测_gru预测matlab-程序员宅基地

文章浏览阅读676次。回归预测 | MATLAB实现基于QPSO-GRU、PSO-GRU、GRU多变量回归预测_gru预测matlab

Error:No toolchains found in the NDK toolchains folder for ABI with prefix: arm-linux-androideabi-程序员宅基地

文章浏览阅读1.3w次。在android studio中编译工程时,偶尔会遇到Error:No toolchains found in the NDK toolchains folder for ABI with prefix: arm-linux-androideabi这样的错误,可能原因是更新了相关组件导致的,解决方法是到Android studio ( Tools -> Android -> SDK Manager_error:no toolchains

推荐文章

热门文章

相关标签