printf()的最终解释是详细解释

电脑杂谈  发布时间:2020-03-30 02:11:01  来源:网络整理

printf格式输出12个0_printf输出数字_printf输出数字

printf()是一种C语言标准库函数,用于将格式化的字符串输出到标准输出. 标准输出是标准输出文件,与终端的屏幕相对应. 在stdio.h头文件中声明了printf().

功能原型:

int printf ( const char * format, ... );

返回值: 返回正确输出的字符总数,并且错误返回负值. 同时,将设置输入和输出流错误标志. 指示器ferror可用于检查输入和输出流错误标志.

调用格式: printf()函数的调用格式为: printf(“格式字符串”,输出表列).

格式字符串包含三种类型的对象: (1)字符串常量; (2)格式控制字符串; (3)转义字符. 字符串常量按原样输出,并在显示中用作提示. 每个输出项目在输出表列中列出. 要求格式控制字符串和每个输出项目的编号和类型必须彼此对应. 格式控制字符串是一个以%开头的字符串,后跟各种格式控制字符,用于解释输出数据的类型,宽度和精度.

注意: 本文中的所有示例代码都是在Linux环境下使用g ++ 4.4.6编译成64位程序的.

printf的格式控制字符串组成如下:

%[flags][width][.prec][length]type

分别:

%[标志][最小宽度][.精度][类型长度]类型。

首先说明类型,因为类型是格式控制字符串中最重要的部分,并且是必不可少的组成部分. 其他选项是可选的. type用于指定输出数据的类型,含义如下:

对应的数据类型

输出十进制带符号的32位整数,我是旧式表示法

printf(“%i”,123);输出123

无符号八进制整数(无前缀0)

printf(“ 0%o”,123);输出0173

无符号十进制整数

printf(“%u”,123);输出123

无符号十六进制整数,x对应abcdef,X对应ABCDEF(不输出前缀0x)

printf(“ 0x%x 0x%X”,123,123);输出0x7b 0x7B

浮动(双精度)

printf输出数字_printf格式输出12个0_printf输出数字

F表示单精度浮点数,lf表示双精度浮点数(printf可以混合,但scanf不能混合)

printf(“%. 9f%.9lf”,0.000000123,0.000000123);输出0.000000123 0.000000123. 请注意指定的精度,否则printf默认将精确到小数点后六位

浮动(双精度)

与f相同,只是无穷大和nan以大写形式输出.

例如printf(“%f%F%f%F \ n”,INFINITY,INFINITY,NAN,NAN);输出是inf INF NAN NAN

浮动(双精度)

科学计数法,使用指数表示浮点数,其中输出中“ e”的情况表示“ e”的情况

printf(“%e%E”,0.000000123,0.000000123);输出1.230000e-07 1.230000E-07

浮动(双精度)

根据值的长度,选择以最短的方式输出%f或%e

printf(“%g%g”,0.000000123,0.123);输出1.23e-07 0.123

浮动(双精度)

根据值的长度,选择以最短的方式输出%f或%E

printf(“%G%G”,0.000000123,0.123);输出1.23E-07 0.123

字符. 输入的数字可以根据ASCII码转换为相应的字符.

printf(“%c \ n”,64)输出A

字符串. 输出字符串中的字符,直到字符串中的空字符(字符串以空字符'\ 0'结尾)

printf(“%s”,“测试测试”);输出: 测试

宽字符串. 输出字符串中的字符,直到字符串中的空字符为止(宽字符串以两个空字符'\ 0'结尾)

setlocale(LC_ALL,“ zh_CN.UTF-8”); wchar_t wtest [] = L“测试”; printf(“%S \ n”,wtest);输出: 测试

十六进制格式的输出指针

printf(“ 0p”,“ lvlv”);输出: 0x004007e6

printf输出数字_printf输出数字_printf格式输出12个0

什么都没有输出. 相应的%n参数是指向带符号的int的指针,之前输出的字符数将存储在指针所指向的位置

int num = 0; printf(“ lvlv%n”,&num); printf(“ num: %d”,num);输出: lvlvnum: 4

自行输出字符'%'(百分号)

printf(“ %%”);产量: %

打印与errno值相对应的错误内容

printf(“%m \ n”);

浮动(双精度)

十六进制表示法输出浮点数,a为小写,A为大写

printf(“%a%A”,15.15,15.15);输出: 0x1.e4ccccccccccdp + 3 0X1.E4CCCCCCCCCCDCCDP + 3

注意: (1)使用printf输出宽字符时,需要使用setlocale来指定本地化信息,还需要指定当前代码的编码方法. 除了使用%S外,您还可以使用%ls. (2)%a和%A是C99引入的格式化类型,它们使用十六进制p表示法输出浮点数. 该表示法类似于E科学表示法,但有所不同. 数字以0x开头,然后是十六进制浮点部分,然后是p之后的以2为底的顺序代码. 以15.15的输出为例,估计输出结果. 15.15转换为二进制是1111.00 1001 1001 1001 1001 ...,因为数字的二进制表示形式具有离散性,所以计算机有时不能准确地表示小数. 例如,可以将0.5精确地表示为0.120.120.1_2,但是不能精确地表示0.15. 将对应于15.15的二进制数向右移动三位数至1.1110 0100 1100 1100 1100 ...相应的十六进制数为0x1.e4ccccccccccd. 请注意,在四舍五入时,数字会四舍五入到一位. 由于它向右移动了三位,因此二进制顺序代码为3. 最终结果为0x1.e4ccccccccccccdp + 3.

(3)除了指示输出的数据类型外,格式控制字符串还可以按标志,宽度,.precision和长度的顺序包含一些其他可选的格式描述. 让我们一一解释.

flags指定输出样式. 值和含义如下:

结果是左对齐的,右边有空格. 默认值为右对齐,左侧为空格.

输出符号(正号或负号)

如果输出值为正,则添加一个空格;如果为负,则添加一个负号.

当类型为o,x,X时,添加前缀0、0x,0X. 当type为a,A,e,E,f,g或G时,请使用小数点. 默认情况下,如果使用.0控件不输出小数部分,则不输出小数点. 当type为g或G时,尾随0被保留.

在输出的前面附加0,直到它填充指定的列宽(不能与“-”一起使用)

示例:

printf("%5d\n",1000);               //默认右对齐,左边补空格
printf("%-5d\n",1000);              //左对齐,右边补空格
printf("%+d %+d\n",1000,-1000);     //输出正负号
printf("% d % d\n",1000,-1000);     //正号用空格替代,负号输出
printf("%x %#x\n",1000,1000);       //输出0x
printf("%.0f %#.0f\n",1000.0,1000.0)//当小数点后不输出值时依然输出小数点
printf("%g %#g\n",1000.0,1000.0);   //保留小数点后后的0
printf("d\n",1000);              //前面补0

输出为:

代表要输出的最小位数,为十进制整数. 如果实际位数大于指定的宽度,则将其输出为实际位数. 如果实际位数小于定义的宽度printf输出数字,则用空格或0补充. 宽度的可能值如下:

十进制整数

printf输出数字_printf格式输出12个0_printf输出数字

printf(“ d”,1000);输出: 001000

星号. 不要显示指定的最小输出宽度,而应使用printf的输出参数列表中给出的星号

printf(“%0 * d”,6,1000);输出: 001000

精度格式字符以“. ”开头. 后跟一个十进制整数. 可能的值如下:

.precision

十进制整数. (1)对于整数(d,i,o,u,x,X),精度表示要输出的最小位数,小于前导零,超过则不截断. (2)对于浮点类型(a,A,e,E,f),精度表示小数点后的位数,默认为六位数,如果不足则设置为0,如果不足则设置为截断它超过了. (3)对于类型说明符g或G,可以输出的最大有效数字. (4)对于字符串,精度表示可以输出的最大字符数,如果小于正常输出,则将被截断. 精度不显示指定的值,默认为0

用一个星号代替值,宽度类似于*,并在输出参数列表中指定精度.

示例:

printf("%.8d\n",1000);          //不足指定宽度补前导0,效果等同于d
printf("%.8f\n",1000.123456789);//超过精度,截断
printf("%.8f\n",1000.123456);   //不足精度,补后置0
printf("%.8g\n",1000.123456);   //最大有效数字为8位
printf("%.8s\n",“abcdefghij”);  //超过指定长度截断

输出:

00001000
1000.12345679
1000.12345600
1000.1235
abcdefgh

请注意,在截断浮点数和整数时会四舍五入.

类型长度表示要输出的数据的长度. 因为同一个类型可以具有不同的长度,例如,整数类型具有16位的short int,32位的int和64位的long int,而浮点类型具有32位的单个精度float和64位的双精度. 为了指示相同类型的不同长度,类型长度应运而生,并成为格式控制字符串的一部分.

由于Markdown表不支持单元格合并,背景色和其他样式,因此直接引用了printf.C ++参考表.

注意: C99引入了类型长度说明符和由背景线标识的相应数据类型.

示例代码:

printf("%hhd\n",'A');               //输出有符号char
printf("%hhu\n",'A'+128);           //输出无符号char
printf("%hd\n",32767);              //输出有符号短整型short int
printf("%hu\n",65535);              //输出无符号短整型unsigned short int
printf("%ld\n",0x7fffffffffffffff); //输出有符号长整型long int
printf("%lu\n",0xffffffffffffffff); //输出有符号长整型unsigned long int

输出:

65
193
32767
65535
9223372036854775807
18446744073709551615

注意: long int是32位还是64位对应于生成的程序32位还是64位. 如果使用g ++编译程序,则可以使用-m32或-m64选项分别生成32位和64位程序. 因为我的测试代码可以编译并生成64位程序,所以long int也是64btis.

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

在printf的实现中,在调用write(这是一个用户空间缓冲区)之前先写入IO缓冲区. 系统调用是软中断,频繁调用,并且需要频繁地进入内核模式. 这种效率不是很高,并且printf实际上写入用户空间IO缓冲区. 仅在满足条件时才调用写入系统调用,从而减少了IO的数量. ,提高效率.

printf格式输出12个0_printf输出数字_printf输出数字

printf默认为glibc中的行缓冲. 在以下情况下,它将刷新缓冲区并输出内容: (1)缓冲区已满; (2)书写字符具有换行符\ n或回车符\ r; (3)调用fflush手动刷新缓冲区; (4)调用scanf从输入缓冲区读取数据,它还将刷新输出缓冲区中的数据.


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/ruanjian/article-157230-1.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...