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进制数 |
|