当前位置:首页 科普知识 printf(格式化输出函数)

printf(格式化输出函数)

发布时间:2023-09-14 18:29:29

printf 是指格式化输出函数,主要功能是向标准输出设备按规定格式输出信息。printf 是C语言标准库函数,定义于头文件 <stdio.h>。printf 函数的一般调用格式为:printf("<格式化字符串>", <参量表>)。输出的字符串除了可以是字母、数字、空格和一些数字符号以外,还可以使用一些转义字符表示特殊的含义。

printf(格式化输出函数)介绍

printf 是指格式化输出函数,主要功能是向标准输出设备按规定格式输出信息。printf 是C语言标准库函数,定义于头文件 <stdio.h>。printf 函数的一般调用格式为:printf("<格式化字符串>", <参量表>)。输出的字符串除了可以是字母、数字、空格和一些数字符号以外,还可以使用一些转义字符表示特殊的含义。

printf函数语法

printf函数声明

printf 函数的声明如下:

// C99 前int printf( const char *format, ... );// C99 起int printf( const char *restrict format, ... );

printf参数列表

format -- 是格式控制字符串,包含了两种类型的对象:普通字符和转换说明。在输出时,普通字符将原样不动地复制到标准输出,转换说明并不直接输出而是用于控制 printf 中参数的转换和打印。每个转换说明都由一个百分号字符(%)开始,以转换说明结束,从而说明输出数据的类型、宽度、精度等。

printf 的格式控制字符串 format 中的转换说明组成如下,其中 中的部分是可选的:

%specifier,即:%说明符。转换说明详解见下文。

附加参数 -- 个数和类型可变的输出列表:根据不同的 format 字符串,函数可能需要一系列的附加参数,每个参数包含了一个要被插入的值,替换了 format 参数中指定的每个 % 标签。参数的个数应与 % 标签的个数相同。

使用 pfinf时要注意一个问题 ,那就是输出列表中的求值顺序,不同的编译系统不一定相同,可以从左到右,也可从右到左。

printf功能

printf 函数在输出格式 format 的控制下,将其参数进行格式化,并在标准输出设备(显示器、控制台等)上打印出来。

printf返回值

如果函数执行成功,则返回所打印的字符总数,如果函数执行失败,则返回一个负数。

printf函数说明及应用示例

printf转换说明详解

format 转换说明组成是%specifier,具体讲解如下:

说明符(specifier)

说明符(specifier)用于规定输出数据的类型,含义如下:

说明符(specifier)

对应数据类型

描述

d / i

int

输出类型为有符号的十进制整数,i 是老式写法

o

unsigned int

输出类型为无符号八进制整数(没有前导 0)

u

unsigned int

输出类型为无符号十进制整数

x / X

unsigned int

输出类型为无符号十六进制整数,x 对应的是 abcdef,X 对应的是 ABCDEF(没有前导 0x 或者 0X)

f / lf

double

输出类型为十进制表示的浮点数,默认精度为6(lf 在 C99 开始加入标准,意思和 f 相同)

e / E

double

输出类型为科学计数法表示的数,此处 "e" 的大小写代表在输出时用的 “e” 的大小写,默认浮点数精度为6

g

double

根据数值不同自动选择 %f 或 %e,%e 格式在指数小于-4或指数大于等于精度时用使用

G

double

根据数值不同自动选择 %f 或 %E,%E 格式在指数小于-4或指数大于等于精度时用使用

c

char

输出类型为字符型。可以把输入的数字按照ASCII码相应转换为对应的字符

s

char *

输出类型为字符串。输出字符串中的字符直至遇到字符串中的空字符(字符串以 '0‘ 结尾,这个 '0' 即空字符)或者已打印了由精度指定的字符数

p

void *

以16进制形式输出指针

%

不转换参数

不进行转换,输出字符‘%’(百分号)本身

n

int *

到此字符之前为止,一共输出的字符个数,不输出文本

示例代码:

// 以下程序用于输出各种格式化数据(其中 "n" 表示换行的转义字符,具体见下文的转义字符说明):#include <stdio.h>int main() {    char ch = 'h';    int count = -9234;    double fp = 251.7366;    // 显示整数    printf( "Integer formats:n"            "   Decimal: %d  Unsigned: %un", count, count);    printf( "Decimal %d as:n   Hex: %Xh  "            "C hex: 0x%x  Octal: %on", count, count, count, count );    // 显示字符    printf("Characters in field:n"          "%10cn", ch);    // 显示实数    printf("Real numbers:n   %f %.2f %e %En", fp, fp, fp, fp );    return 0;} //程序运行结果:Integer formats:   Decimal: -9234  Unsigned: 4294958062Decimal -9234 as:   Hex: FFFFDBEEh  C hex: 0xffffdbee  Octal: 37777755756Characters in field:         hReal numbers:   251.736600 251.74 2.517366e+002 2.517366E+002
flags(标志)

标志(flags)用于规定输出样式,含义如下:

flags(标志)

字符名称

描述

-

减号

在给定的字段宽度内左对齐,右边填充空格(默认右对齐)

+

加号

强制在结果之前显示加号或减号(+ 或 -),即正数前面会显示 + 号;

默认情况下,只有负数前面会显示一个 - 号

(空格)

空格

输出值为正时加上空格,为负时加上负号

#

井号

specifier 是 o、x、X 时,增加前缀 0、0x、0X;

specifier 是 e、E、f、g、G 时,一定使用小数点;

specifier 是 g、G 时,尾部的 0 保留

0

数字零

对于所有的数字格式,使用前导零填充字段宽度(如果出现了减号标志或者指定了精度,则忽略该标志)

示例代码:

#include <stdio.h>#define PAGES 931int main() {    const double RENT = 3852.99;  // const-style constant    printf("*%-10d*n", PAGES);                            //左对齐,右边补空格    printf("*%+4.2f*n", RENT);                            //输出正负号    printf("%x %X %#xn", 31, 31, 31);                     //输出0x    printf("**%d**% d**% d**n", 42, 42, -42);             //正号用空格替代,负号输出    printf("**%5d**%5.3d**%05d**%05.3d**n", 6, 6, 6, 6);  //前面补0    return 0;} //程序运行结果:*931       **+3852.99*1f 1F 0x1f**42** 42**-42****    6**  006**00006**  006**
width(最小宽度)

最小宽度(width)用于控制显示字段的宽度,取值和含义如下:

width(最小宽度)

字符名称

描述

digit(n)

数字

字段宽度的最小值,如果输出的字段长度小于该数,结果会用前导空格填充;如果输出的字段长度大于该数,结果使用更宽的字段,不会截断输出

*

星号

宽度在 format 字符串中规定位置未指定,使用星号标识附加参数,指示下一个参数是width

示例代码:

#include <stdio.h>#define PAGES 931int main() {    printf("*%2d*n", PAGES);         //输出的字段长度大于最小宽度,不会截断输出    printf("*%10d*n", PAGES);        //默认右对齐,左边补空格          printf("*%*d*n", 2, PAGES);      //等价于 printf("*%2d*n",PAGES)    return 0;} //程序运行结果:*931**       931**931*
.precision(精度)

精度(.precision)用于指定输出精度,取值和含义如下:

.precision(精度)

字符名称

描述

.digit(n)

点+数字

对于整数说明符(d、i、o、u、x、X):precision 指定了要打印的数字的最小位数。如果写入的值短于该数,结果会用前导零来填充。如果写入的值长于该数,结果不会被截断。精度为 0 意味着不写入任何字符;

对于 e、E 和 f 说明符:要在小数点后输出的小数位数;

对于 g 和 G 说明符:要输出的最大有效位数;

对于 s 说明符:要输出的最大字符数。默认情况下,所有字符都会被输出,直到遇到末尾的空字符;

对于 c 说明符:没有任何影响;

当未指定任何精度时,默认为 1。如果指定时只使用点而不带有一个显式值,则标识其后跟随一个 0。

.*

点+星号

精度在 format 字符串中规定位置未指定,使用点+星号标识附加参数,指示下一个参数是精度

示例代码:

#include <stdio.h>int main() {    const double RENT = 3852.99;  // const-style constant    printf("*%4.2f*n", RENT);    printf("*%3.1f*n", RENT);    printf("*%10.3f*n", RENT);    return 0;} //程序运行结果:*3852.99**3853.0**  3852.990*
length(类型长度)

类型长度(length)用于控制待输出数据的数据类型长度,取值和含义如下:

length(类型长度)

描述

h

参数被解释为短整型或无符号短整型(仅适用于整数说明符:i、d、o、u、x 和 X)

l

参数被解释为长整型或无符号长整型,适用于整数说明符(i、d、o、u、x 和 X)及说明符 c(表示一个宽字符)和 s(表示宽字符字符串)

示例代码:

#include <stdio.h>#define PAGES 336int main() {    short num = PAGES;     long n3 = 2000000000;     long n4 = 1234567890;      printf("num as short and unsigned short:  %hd %hun", num, num);     printf("%ld %ldn", n3, n4);    return 0;} //程序运行结果:num as short and unsigned short:  336 336 2000000000 1234567890

printf转义序列

转义序列在字符串中会被自动转换为相应的特殊字符。printf() 使用的常见转义字符如下:

转义序列

描述

ASCII 编码

'

单引号

0x27

"

双引号

0x22

?

问号

0x3f

反斜杠

0x5c

a

铃声(提醒)

0x07

b

退格

0x08

f

换页

0x0c

n

换行

0x0a

r

回车

0x0d

t

水平制表符

0x09

v

垂直制表符

0x0b

示例代码:

#include <stdio.h>int main(void) {    printf("ThisnisnantestnnShe said, "How are you?"n");    return 0;}//程序运行结果:ThisisatestShe said, "How are you?"

printf注意事项

printf函数返回值

printf 函数的返回值为其输出字符串常量的字符数(注意字符数与字数的区别),注意计数针对所有的打印字符,包括空格和不可见的换行字符(不包括字符串的空字符)。

printf打印较长字符串

有时printf 语句会很长,以至于不能在一行被放下,如果必须分割一个字符串,有以下三种方式可以选择。需要注意的是,可以在字符串中使用 "n" 换行符来表示换行字符,但是在字符串中不能通过回车键来产生实际的换行字符。

示例代码:

#include <stdio.h>int main() {    //方式一:使用多个printf语句    printf("Here's one way to print a ");    printf("long string.n");         //方式二:使用反斜杠 "" 加回车的组合来进行分割,注意下一行要从最左侧开始,否则缩进会成为该字符串的一部分    printf("Here's another way to print a long string.n");         //方式三:采用字符串连接的方法,中间不能有逗号,可以是空格或者回车    printf("Here's the newest way to print a "          "long string.n");               return 0;}//程序运行结果:Here's one way to print a long string.Here's another way to print a long string.Here's the newest way to print a long string.

在使用printf函数进行数据输出、特别是进行多个输出时,要注意一下问题:

1.前后格式要一致

2.输出个数要相等

3.附加格式要清楚

4.求值顺序要理清

温馨提示:
本文【printf(格式化输出函数)】由作者 爱百科 转载提供。 该文观点仅代表作者本人, 自学教育网 信息发布平台,仅提供信息存储空间服务, 若存在侵权问题,请及时联系管理员或作者进行删除。
(c)2008-2025 自学教育网 All Rights Reserved 汕头市灵创科技有限公司
粤ICP备2024240640号-6