赞
踩
printf是C语言格式化输出函数,用于将格式化后的字符串输出到标准输出。标准输出,即标准输出文件,对应终端的屏幕。
printf申明于头文件#include <stdio.h>。函数原型:int printf(const char * format, ...);
返回值: 正确返回输出的字符总数,错误返回负值,与此同时,输入输出流错误标志将被置值,可由指示器ferror来检查输入输出流的错误标志。
调用格式: printf函数的调用格式为:printf("格式化字符串",输出表列)。
格式化字符串包含三种对象,分别为:
字符串常量原样输出,在显示中起提示作用。输出表列中给出了各个输出项,要求格式控制字符串和各输出项在数量和类型上应该一一对应。其中格式控制字符串是以%开头的字符串,在%后面跟有各种格式控制符,以说明输出数据的类型、宽度、精度等。
printf的格式控制字符串组成: %[flags][width][.prec][length]type
分别代表为:%[标志][最小宽度][.精度][类型长度]类型。
首先说明类型,因为类型是格式控制字符串的重中之重,是必不可少的组成部分,其它的选项都是可选的。type用于规定输出数据的类型,含义如下:
占位符 | 对应数据类型 | 含义 | 示例 |
---|---|---|---|
%d | int | 输出int类型十进制数据。 | |
%i | int | 输出int类型十进制数据。 | printf("%i",2147483647);// 输出2147483647 |
%o | unsigned int | 输出unsigned int类型八进制数据。 |
|
%u | unsigned int | 输出unsigned int类型十进制数据。 | printf("%u", 4294967295);// 输出4294967295 |
%x | unsigned int | 输出unsigned int类型十六进制数据,字母部分是小写。 |
|
%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类型十进制的 |
|
%e | float(double) | 输出float和double类型十进制科学计数数据,e是小写。 |
|
%E | float(double) | 输出float和double类型十进制科学计数数据,e是大写。 |
|
%g | float(double) | 输出float和double类型十进制数据,根据数据的长度选择%f或%e方式输出。 |
|
%G | float(double) | 输出float和double类型十进制数据,根据数据的长度,选择%f或%E方式输出。 | printf("%G %G",0.000001,0.1); //输出1E-006 0.1 |
%c | char | 输出char类型数据。 |
|
%s | char* | 输出char*类型数据,直至输出到'\0'字符。 |
|
%S/%ls | wchar_t* | 输出wchar_t*类型数据,直至输出到'\0'字符。 | printf("%S %ls",L"A",L"A");// 输出A A |
%p | void* | 输出void*类型十六进制数据。 |
|
%n | int* | 不输出任何数据。%n对应的参数是一个指向int的指针,在此之前输出的字符数将存储到指针所指的位置。 |
|
%% | char | 输出char类型%数据本身。 |
|
%m | 无 | 打印errno值对应的出错内容。 | printf("%m\n"); |
%a | float(double) | 输出float和double类型十六进制p计数法数据,字母部分是小写。 |
|
%A | float(double) | 输出float和double类型十六进制p计数法数据,字母部分是大写。 | printf("%A",0.000001); //输出0X1.0C6F7AP-20 |
注: 格式控制字符串除了指明输出的数据类型,还可以包含一些其它的可选的格式说明,依序有 flags, width, .precision and length。下面一一讲解。
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 |
用十进制整数来表示输出的最少位数。若实际位数多于指定的宽度,则按实际位数输出,若实际位数少于定义的宽度则补以空格或0。width的可能取值如下:
width | 说明 | 示例 |
---|---|---|
数值 | 输出结果右对齐,不足左边补空格。 | printf("%2d",1);// 输出 1 |
* | 不指明输出最小宽度,而是以星号代替,在printf的输出参数列表中给出。 | printf("%*d",2,1);// 输出 1 |
精度格式符以.开头,后跟十进制整数。可取值如下:
.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 |
注:在对浮点数和整数截断时,存在四舍五入。
类型长度指明待输出数据的长度。因为相同类型可以有不同的长度,比如整型有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 | 纵向制表符 |
\\ | 反斜杠 |
\” | 双引号 |
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。