1.printf的基本用法
在C语言中,printf是我们经常使用的一个函数,它名字中的print是打印的意思,而后面的f是format的缩写也就是格式化,所以它的意思就是格式化输出,它的原型声明在头文件stdio.h中。printf函数的一般形式如下:
int printf(const char *format, ...);
printf函数的format是格式化字符串,用于指定输出格式。后面的...是可变参数,用于向函数传递要输出的数据。例如:
#include <stdio.h>
int main()
{
printf("hello world!\n");
return 0;
}
在上面示例中,hello world!\n是输出文本,其中\n是转义字符。转义字符顾名思义就是转变原来意思的字符,它是以反斜杠\开头,后跟一个或多个字符。例如在上面例子中的\n,它所表示的意识是换行,我们可以理解为\让字符n的意思发生了转变,从字符n变成了\n换行,
以下是常用的转义字符:
- \n:换行,将光标移动到下一行。
- \r:回车,将光标移动到当前行行首。
- \t:水平制表符,将光标移动到下一个制表位,也就是键盘按一下tab键的距离。
- \v:垂直制表符,将光标移动到下一行,但不会是行首。
- \b:退格,将光标向左移动一个字符的位置。
- \f:换页,将光标移动到下一行的开头。
- \a:响铃,蜂鸣器鸣响。
- \':单引号。
- \":双引号。
- \\:反斜杠。
- \?:问号,在书写多个问号时,防止他们别解析成三字母词。
- \0:空字符,字符串的结束标志。
- \ddd:1~3个八进制数,如:\130->88,表示字符X。
- \xdd:2个十六进制数,如:\x30 表示字符0
注意:\ddd是先将八进制数转换为十进制数,然后根据十进制数在ASCII表找到对应的字符,如果在你看的ASCII表中没有十六进制数,那么看到\xdd时也需先将其转换为十进制。
2.占位符
所谓“占位符”,就是这个位置可以用其他的值来代入,可以是常量、变量以及函数。例如:
#include <stdio.h>
int main()
{
int heigtht = 175;
float weight = 55.87;
printf("I am %d years old this year, with a height of %d
and a weight of %f kg.\n", 22 , heigtht , weight );
return 0;
}
上面示例中,I am %d years old this year, with a height of %d and a weight of %f\n是输出文本,而里面的%d和%f就是我们所谓的占位符,表示这个位置用其他的值来代替。占位符的第一个位置规定是%,第二个位置表示占位符的类型,比如整型就用%d,字符型就用%c。printf()的第二个参数是替换占位符的值,比如我们上面的22替换的是第一个%d,height替换的是第二个%d,weight替换的是%f。执行后的输出结果为:I am 22 years old this year, with a height of 175 and a weight of 55.87kg.。
C语言中的占位符如下:
-
%a :十六进制浮点数,字母输出为小写。
-
%A :十六进制浮点数,字母输出为大写。
-
%c :字符。
-
%s :字符串。
-
%o :八进制整数。
-
%ho :把进制 short int 类型。
-
%lo :八进制 long int 类型。
-
%llo :八进制 long long int 类型。
-
%d :十进制整数。
-
%hd :十进制 short int 类型。
- %ld :十进制 long int 类型。
- %lld :十进制 long long int 类型。
- %u :无符号整数(unsigned int)。
- %hu :unsigned short int 类型。
- %lu :unsigned long int 类型。
- %llu :unsigned long long int 类型。
- %x :十六进制整数。
- %hx :十六进制 short int 类型。
- %lx :十六进制 long int 类型。
- %llx :十六进制 long long int 类型。
- %f :小数(包含 float 类型和 double 类型)。
- %Lf :long double 类型浮点数。
- %Le :科学计数法表⽰的 long double 类型浮点数。
- %e :使用科学计数法的浮点数,指数部分的e为小写。
- %E :使用科学计数法的浮点数,指数部分的E为大写。
- %g :6个有效数字的浮点数。整数部分⼀旦超过6位,就会⾃动转为科学计数法,指数部分的 e 为⼩写。
- %G :等同于 %g ,唯⼀的区别是指数部分的 E 为⼤写。
- %i :整数,基本等同于 %d 。
- %n :已输出的字符串数量。该占位符本⾝不输出,只将值存储在指定变量之中。
- %p :指针。
- %zd : size_t 类型。
- %% :输出⼀个百分号。
对于上面的占位符我们需要记住一些常用的就能够将上面的所有占位符记住,比如记住了%d,就可以向后面进行延伸,是short int就是%hd,long int就是%ld,long long int就是%lld。常用的占位符:%c,%s,%d,%o,%x,%f,%lf,%p,%%。
3.printf的输出格式
printf()可以定制占位符的输出格式。
例如:
#include <stdio.h>
int main()
{
int score=354;
float number=123.53465;
printf("%5d\n",score);
printf("%-5d\n",score);
printf("%.4f\n",number);
printf("%8.4f\n",number);
printf("%.7s\n","hello world!");
printf("%+d\n",-12);
return 0;
}
下面我们对上面六个不同printf()进行解释。
第一个printf()中的%5d表示这个占位符的宽度最小为5。不满5时,在输出数字的前面补空格。输出的值默认是右对齐,如果想将其改成左对齐需要在占位符的%后加-号,同时补齐也就变成在数字后面补空格,也就是第二行printf()代码。
第三个printf()中的%.4f表示保留小数点后面4位数,不足补0。
第四个printf()中的%8.4f表示输出的宽度最小是8,小数位数是4,其中的小数点.也算一位。我们也可以写成:
printf("%*.*f\n",8,4,number);
第五个printf()中的%.7s表示只输出7个字符,其中空格也算一个字符,即“hello w”
第六个是显示负号,因为默认情况下,printf()不对整数显示+号,只对负数显示-号
输出结果如下:
4.printf的返回值
printf()函数的返回值是返回成功写入的字符数,是一个整数。例如,如果 printf 成功打印一个字符串,则返回该字符串的长度,请看下面的代码:
#include <stdio.h>
int main()
{
int num=printf("hello world!");
printf("\n%d",num);
}
输出的结果为:
其中我把\n放在了第二个printf()函数下是因为\n也是一个字符。