printf函数详细讲解

(1)简介

printf函数是c语言当中非常重要的格式化输出函数

其函数原型为:int printf(const char *format, ...);

其函数返回值:打印出的字符格式

其调用格式为:printf("<格式化字符串>", <参量表>);

(2)转换说明:

转换格式为:%[标志][宽度][.精度][类型长度]类型

除了最后的类型之外都是可选的字段

标志
标志  意义
-
项目是左对齐的;也就是说,会把项目打印在字段的左侧开始处。示例:"%-20s"

+
有符号的值若为正,则显示带加号的符号;若为负,则带减号的符号。示例:"%+6.2f"

(空格)
带符号的值若为正,则显示时带前导空格(但是不显示符号);若为负,则带减号符号。+标志会覆盖空格标志;示例:"% 6.2f"

#
使用转换说明的可选形式。若为%o格式,则以0开始;若为%x或%X格式,则以0x或0X开始。对于所有的浮点形式,#保证了即使不跟任何数字,也打印一个小数点符号。对于%g和%G格式,它防止尾随0被删除;示例:"%#o"

0
对于所有的数字格式,用前导0而不是用空格填充字段。如果出现-标志或者指定了精度(对于整数)则忽略该标志;示例:"%010d"

宽度,精度
修饰符 意义
digit(s) 字段宽度的最小。如果该字段不能容纳要打印的数或者字符串,系统就会使用更宽的字段。示例:"%4d"
.digit(s) 精度,对于%e,%E和%f转换,是将要在小数点的右边打印的数字的位数。对于%g和%G转换,是有效数字的最大位数。对于%s转换,是将要打印的字符的最大数目。对于整数转换,是将要打印的数字的最小位数;如果必要,要使用前导0来达到这个位数。只使用"."表示其后跟随一个零,所以%.f和%.0f相同;示例:"%5.2f"打印一个浮点数,他的字段宽度为5个字符,小数点后面有两位数字
类型长度
修饰符 意义
h 和整数转换说明符一起使用,表示一个short int或unsigned short int类型数值;示例:"%hu" "%hd" "%hx"
hh 和整数转换说明符一起使用,表示一个signed char或unsigned char类型数值;示例:"%hhu" "%hhd" "%hhx"
j 和整数转换说明符一起使用,表示一个intmax_t或uintmax_t值;示例:"%jd" "%jX"
l 和整数转换说明符一起使用,表示一个long int或unsigned long int类型数值;示例:"%lu" "%ld"
ll 和整数转换说明符一起使用,表示一个long long int或unsigned long long int类型数值(c99);示例:"%llu" "%lld"
L 和浮点转换说明符一起使用,表示一个long double值;示例:"%Lf" "%Le"
t 和整数转换说明符一起使用,表示一个ptrdiff_t值(与两个指针之间的差对应的类型)(c99);示例:"%td"
z 和整数转换说明符一起使用,表示一个size_t值(sizeof返回类型)(c99);示例:"%zd"
I64 和整数转换说明符一起使用,表示一个_int64值
转换说明符
转换说明 输出
%a 浮点数、十六进制数字和p-计数法(c99)
%A 浮点数、十六进制数字和P-计数法(c99)
%c 一个字符
%d 有符号十进制整数
%e 浮点数、e-记数法
%E 浮点数、E-计数法
%f 浮点数、十进制记数法
%g 根据数值不同自动选择%f或%e。%e格式在指数小于-4或者大于精度时使用
%G 根据数值不同自动选择%f或%E。%E格式在指数小于-4或者大于精度时使用
%i 有符号十进制整数(与%d相同)
%o 有符号八进制整数
%p 指针
%s 字符串
%u 无符号十进制整数
%x 使用十六进制数0x的无符号十六进制整数
%X 使用十六进制数字0X的无符号十六进制证书
%% 打印一个百分号

(3)示例:

 1 #include <stdio.h>
 2
 3 int main() {
 4     const char * pString = "Hello World";
 5     const int    nNumber = 1024;
 6     const double dNumber = 3.141593;
 7     //  %d  示例
 8     printf("*%d*\n", nNumber);          //输出:*1024*
 9     printf("*%6d*\n", nNumber);         //输出:*  1024*
10     printf("*%6.5d*\n", nNumber);       //输出:* 01024*
11     printf("*%-6.5d*\n", nNumber);      //输出:*01024 *
12     printf("*%06d*\n", nNumber);        //输出:*001024*
13     printf("*%+6d*\n", nNumber);        //输出:* +1024*
14
15     //  %f  示例
16     printf("*%f*\n", dNumber);          //输出:*3.141593*
17     printf("*%10f*\n", dNumber);        //输出:*  3.141593*
18     printf("*%10.2f*\n", dNumber);      //输出:*      3.14*
19     printf("*%-10.2f*\n", dNumber);     //输出:*3.14      *
20     printf("*%+10.2f*\n", dNumber);     //输出:*     +3.14*
21     printf("*%010.2f*\n", dNumber);     //输出:*0000003.14*
22
23     //  %s  示例
24     printf("*%s*\n", pString);          //输出:*Hello World*
25     printf("*%20s*\n", pString);        //输出:*         Hello World*
26     printf("*%-20s*\n", pString);       //输出:*Hello World         *
27     printf("*%.10s*\n", pString);       //输出:*Hello Worl*
28     return 0;
29 }

(4)浮点参数的转换:

有用于打印浮点类型double和long double的转换说明符,但没有用于float的说明符。原因是在K&R C中float值在被用于表达式中或者被用作参数之前,会被自动转换成double类型。一般情况下,ANSI C不会自动把float转换成double。不过,为了保护大量现有的假设float参数仍会自动被转换成double。因此,不过是K&R C还是ANSI C,都无需专门的转换说明符来显示float。

原文地址:https://www.cnblogs.com/windpiaoxue/p/9183506.html

时间: 2024-08-28 01:03:39

printf函数详细讲解的相关文章

scanf函数详细讲解

(1)简介: scanf函数是c语言当中非常重要的格式化输入函数 其函数原型为:int scanf(const char *format, ...); 其函数返回值:成功格式化解析的个数 其调用格式为:scanf("<格式化字符串>", <参量表>); (2)转换说明: 转换格式为:%[*][宽度][类型长度]类型 除了最后的类型之外都是可选的字段 转换修饰符 修饰符 意义 * 滞后赋值:示例:"%*d" digit(s) z最大字段宽度:在

C笔记01:关于printf函数输出先后顺序的讲解

关于printf函数输出先后顺序的讲解!! 对于printf函数printf("%d%d\n", a, b);函数的实际输出顺序是这样的先计算出b,然后再计算a,接着输出a,最后再输出b:例子如下: 1 #include<stdio.h> 2 int main() 3 { 4 int i=3,j=5; 5 printf("%d %d\n",(i++)-(--j),j=(i+=2)); 6 printf("%d %d\n",i,j);

《The Swift Programming Language 》——函数 使用方法详细讲解

函数是用来完成特定任务的独立的代码块.你给一个函数起一个合适的名字,用来标示函数做什么,并且当函数需要执行的时候,这个名字会被"调用". Swift 统一的函数语法足够灵活,可以用来表示任何函数,包括从最简单的没有参数名字的 C 风格函数,到复杂的带局部和外部参数名的 Objective-C 风格函数.参数可以提供默认值,以简化函数调用.参数也可以即当做传入参数,也当做传出参数,也就是说,一旦函数执行结束,传入的参数值可以被修改. 在 Swift 中,每个函数都有一种类型,包括函数的参

关于printf函数输出先后顺序的讲解!!

对于printf函数printf("%d%d\n",a,b);函数的实际输出顺序是这样的先计算出b,然后在计算a,接着输出a,最后在输出b:例子如下:#include<iostream>using namespace std;int main(){ int i=3,j=5; printf("%d  %d\n",(i++)-(--j),j=(i+=2)); printf("%d  %d\n",i,j);  return 0;}    

C 中 关于printf 函数中度剖析

题外话  这篇博文主要围绕printf函数分析的,主要讲解printf 使用C的可变参数机制, printf是否可重入(是否线程安全), printf函数的源码实现. 正文 1.C中可变参数机制 我们先举个例子,假如现在有这样一个需求 "需要一个不定参数整型求和函数". 具体实现代码如下 // 需要一个不定参数整型求和函数 int sum_add(int len, ...) { int sum = 0; va_list ap; va_start(ap, len); // 初始化 将ap

C++语言堆栈的详细讲解

本文主要向大家介绍了C++语言堆栈的详细讲解,通过具体的内容向大家展示,希望对大家学习C++语言有所帮助. 一.预备知识—程序的内存分配 一个由c/C++编译的程序占用的内存分为以下几个部分 1.栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等.其操作方式类似于数据结构中的栈. 2.堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 .注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵. 3.全局区(静态区)(stati

[iOS]数据库第三方框架FMDB详细讲解

[iOS]数据库第三方框架FMDB详细讲解 初识FMDB iOS中原生的SQLite API在进行数据存储的时候,需要使用C语言中的函数,操作比较麻烦.于是,就出现了一系列将SQLite API进行封装的库,例如FMDB.PlausibleDatabase.sqlitepersistentobjects等. FMDB是一款简洁.易用的封装库.因此,在这里推荐使用第三方框架FMDB,它是对libsqlite3框架的封装,用起来的步骤与SQLite使用类似,并且它对于多线程的并发操作进行了处理,所以

Android自定义相机超详细讲解

Android自定义相机超详细讲解 转载请标明出处: http://blog.csdn.net/vinicolor/article/details/49642861: 由于网上关于Android自定义相机的文章写得不是太详细,Google官方的文档又说得不太容易理解,所以今天我来详细讲解一下Android自定义相机. 这篇文章主要写给一些刚刚接触Android的那些看官方API困难以及不太了解Android机制的同学们,所以熟练开发者可以绕道了. 最近在使用Camera类的时候发现居然被弃用了,

PE格式详细讲解2 - 系统篇02

原作者:小甲鱼 (注:最左边是文件头的偏移量.) IMAGE_DOS_HEADER STRUCT { +0h WORD e_magic // Magic DOS signature MZ(4Dh 5Ah) DOS可执行文件标记 +2h WORD e_cblp // Bytes on last page of file +4h WORD e_cp // Pages in file +6h WORD e_crlc // Relocations +8h WORD e_cparhdr // Size o