printf()输出格式详解(Keil C51 、标准C)

1.printf()简介

printf() 是 式样化 输出函数, 简单说 就是 规定式样输出消息 的函数。

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

printf() 所在头文件 stdio.h

#include <stdio.h>

函数原型:

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

返回值: 

正确情况下 返回 输出的 字符总数
错误情况下 返回 负值;同时输入输出流错误标志将被置位,通过 ferror 来检查输入输出流的错误标志

调用格式:

          printf (“格式化字符串”, 输出表列);

格式化字符串 包含三种对象:

(1)字符串常量 (按原样输出);

(2)格式控制字符串 (按照一定格式输出;以%开头的字符串,%后面跟着 各种格式控制符,以说明输出数据的类型、宽度、精度等);

(3)转义字符 (以\开头+字母的特殊操作命令字符,如:\r 回车; \n 换行等)。

2.字符串常量

字符串就是按原样输出,写啥就输出啥!

3.格式控制字符串

格式控制字符串 形式:

"%【标志】【宽度】【.精度】【长度】类型 【】表示可省略,根据需要添加。

3.1标志

格式字符 意义
- 输出 结果左对齐,右边填空格(和输出最小宽度搭配使用)
+ 输出 结果右对齐,左边填空格(和输出最小宽度搭配使用),同时显示符号
# 类型是o、x、X时,增加前缀0、0x、0X。
类型是a、A、e、E、f、g、G时,一定使用小数点。默认的,如果使用.0  
控制不输出小数部分,则不输出小数点。
类型是g、G时,尾部的0保留。
空格 输出值为正时加上空格,为负时加上负号
0 将输出的前面补上0,直到占满指定列宽为止(不可以搭配使用“-”)

3.2宽度

宽度 描述 示例
数值 十进制整数 printf("%06d",1000);输出:001000
* 星号。不显示指明输出最小宽度,而是以星号代替,在printf的输出参数列表中给出 printf("%0*d",6,1000);输出:001000
*     星号。还可以控制浮点型数字保留的位数 printf("%.*f", x, a); x是位数控制

示例代码:

#include <stdio.h>

void main(void)
{
    int x = 9;

    printf("%03d \r\n", x); //补0凑齐3位

    printf("%02d \r\n", x); //补0凑齐2位

    printf("%3d \r\n", x); //补空格,凑齐3位

    printf("%d \r\n", x); //不补位,输出有效位
}

输出:

3.3精度

.精度 描述
.数值 对于整数说明符(d, i, o, u, x, x): precision指定要写入的最小数字数。如果要写入的值比这个数字短,结果将用前导零填充。即使结果较长,值也不会被截断。精度为0意味着不为值0写入字符。
对于a, a, e, e, f和f说明符:这是小数点后要打印的位数(默认为6)。
对于g和g说明符:这是要打印的有效数字的最大数量。
对于s:这是要打印的最大字符数。默认情况下,将打印所有字符,直到遇到结束符空字符为止。
如果指定的周期没有显式的精度值,则假定为0。
.* 精度不是在格式字符串中指定的,而是作为必须格式化的参数之前的附加整数值参数。

3.4长度

说明符
Keil C51 标准C d i u o x X f F e E g G a A c s p n
类型长度符号 类型长度 类型长度符号 类型长度
(无) 默认 int (无) 依据类型默认 int unsigned int double int char* void* int*
b 8位 hh 8位 signed char unsigned char signed char*
h 16位 h 16位 short int unsigned short int short int*
l 32位 l 32位 long int unsigned long int wint_t wchar_t* long int*
ll 64位 ll 64位 long long int unsigned long long int long long int*

在Keil C51中用printf输出一个单字节变量时要使用%bd,如:

printf(“Current count: %bd\n”, counter);//输出8位”十进制有符号整数”
printf(“Current count: %bx\n”, counter);//输出8位”无符号以十六进制表示的整数”

在标准C语言中都是使用%d:

printf(“Current count: %d\n”, counter);

3.5类型

说明类型,因为类型是格式控制字符串的重中之重,是必不可少的组成部分,其它的选项都是可选的。类型用于规定输出数据的类型,含义如下:

格式字符 输出示例 意义
%d printf("%d",16); 以十进制输出带符号整数(正数不输出符号)
%u printf("%u",16); 以十进制输出无符号整数
%f printf("%f",3.14); 以小数形式输出单、双精度实数
%s printf("%s","Chi"); 输出字符串
%c printf("%c",'x'); 输出单个字符
%x printf("%x",5B); 以十六进制输出无符号整数(不输出前缀 0x)
%o printf("%o",75); 以八进制输出无符号整数(不输出前缀 0)
%e printf("%e",30000); 以指数形式输出单、双精度实数
%g printf("%e",30000); 以 %f、%e 中较短的宽度输出单、双精度实数
%p  输出地址符

4.转义字符

转义字符 意义
\r  回车符
\n   换行符
\f  清屏并换页符
\t  横向制表符
\v 纵向制表符
\a 警报(响铃)符
\b 回退符
反斜杠
\” 双引号
\xhh 表示一个ASCII码用16进表示,其中hh是1到2个16进制数

猜你喜欢

转载自blog.csdn.net/weixin_46672094/article/details/121618950