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标准Cd iu o x Xf F e E g G a Acspn
类型长度符号类型长度类型长度符号类型长度
(无)默认 int(无)依据类型默认intunsigned intdoubleintchar*void*int*
b8位hh8位signed charunsigned charsigned char*
h16位h16位short intunsigned short intshort int*
l32位l32位long intunsigned long intwint_twchar_t*long int*
ll64位ll64位long long intunsigned long long intlong 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类型

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

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

4.转义字符

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

  • 16
    点赞
  • 95
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值