格式化输出:
在前几篇文章的代码样例中多次出现了printf(),在这里进行详细说明。
printf("hello world");
printf()是C语言自带的输出函数,包含在头文件<stdio.h>中,能够把括号中双引号内的内容原样输出到屏幕上。但这样只能输出固定的内容,而我们的变量是在一直改变的。为了输出变量,printf()函数还提供了格式化输出的用法。
int a = 1;
printf("%d",a);
上面的%d就是转换说明,告诉printf()函数我们需要输出的是十进制整数,而逗号后的a就是我们要输出的变量。注意,转换说明和后面的变量(或数字和字符)需要按顺序一一对应。常用的转换说明及其打印的输出结果汇总如下。
转换说明 | 输出 |
---|---|
%c | 单个字符 |
%d | 有符号十进制整数 |
%f | 浮点数,十进制计数法 |
%p | 指针 |
%s | 字符串 |
%u | 无符号十进制整数 |
%% | 打印一个百分号 |
但这么少的转换说明符显然不能满足我们的使用需求,因此我们可以在%和转换字符之间插入修饰符来修饰转换说明。
修饰符 | 含义 |
---|---|
数字 | 最小字段宽度,如果该字段不能容纳待打印的数字或字符串,系统会使用更宽的字段:“%4d” |
.数字(注意前面有一个点) | 精度。对于%f表示小数点右边数字的位数。对于%s表示待打印字符的最大数量。对于整型打印,表示待打印数字的最小位数,如果有必要会使用前导0来达到这个效果。如果只有 . 表示其后跟随一个0,因此%.f和%.0f相同。:“%5.2f“ |
h | 与整型转换一起使用,表示short int或unsigned short int类型的值:”%hu“、”%6.4hd“ |
l | 与整型转换一起使用,表示long int或unsigned long int类型的值:”%8lu“、”%ld“。或与实型转换一起使用,表示double类型的值:”%lf“ |
ll | 与整型转换一起使用,表示long long int或unsigned long long int类型的值:”%8llu“、”%lld“ |
L | 与实型转换一起使用,表示long double类型的值:”%Lf“ |
- | 待打印项左对齐,从字段的左侧开始打印该项:”%-20s“ |
+ | 有符号值若为正,则在值前面显示加号;若为负,则在值前面显示减号。 |
空格 | 有符号值若为正,则在值前面显示前导空格(不显示任何符号);若为负,则在值前面显示减号加上标记并覆盖空格:”% 6.2f“ |
这些符号实际上并不需要去死记硬背,在自己写代码的过程中会慢慢熟悉。
如果读者有认真看了ASCII码表可能会有印象,表上除了很多我们可以直接打印出来的字符,还有很多无法直接打印的符号,比如”换行“或者会引起歧义的双引号等(因为双引号是printf()语句输出内容的边界)。C语言中通过转义字符(反斜杠”\“)来解决这个问题。