C语言printf()格式化输出函数详细解说

C语言printf()格式化输出函数详细解说

printf()简介

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

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

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

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

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

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

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


格式控制字符串详解

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

C语言printf()格式化输出函数详细解说_第1张图片



输出最小宽度(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

C语言printf()格式化输出函数详细解说_第2张图片

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


类型长度(length)

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

这里写图片描述

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

 C语言printf()格式化输出函数详细解说_第3张图片

注: 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

你可能感兴趣的:(C,#,printf格式化输出函数,printf,c语言,开发语言,后端)