赞
踩
printf()函数是C语言标准库函数,用于格式化输出变量到标准输出。printf()申明于头文件stdio.h。
printf函数原型如下:
#include <stdio.h>
int printf (const char *__format, ...)
printf的格式控制字符串组成如下:
%[flags][width][.prec][length]type
分别为:
%[标志][最小宽度][.精度][类型长度]类型。
类型如下:
类型type | 说明 |
---|---|
%d | 十进制有符号整数 |
%u | 十进制无符号整数 |
%f、%lf | 单精度浮点数用f,双精度浮点数用lf |
%s | 字符串 |
%c | 单个字符 |
%p | 指针的值 |
%e | 以指数形式表示浮点数 |
%x、 %X、%#x 、%#X | 输出十六进制 |
%o | 输出八进制 |
标志如下:
标志type | 名称 | 说明 |
---|---|---|
- | 减号 | 结果左对齐,右边填空格。默认是右对齐,左边填空格。 |
+ | 加号 | 输出符号(正号或负号) |
space | 空格 | 输出值为正时加上空格,为负时加上负号 |
# | 井号 | type是o、x、X时,增加前缀0、0x、0X |
0 | 数字零 | 将输出的前面补上0,直到占满指定列宽为止(不可以搭配使用“-”) |
如果想输出%号,需敲两个%,如printf("%%");
符号*放置在宽度或精度位置时,则是为了实现动态格式输出,*代表某个变量值。一般%*.*或%.*在数值或字符串类型中使用较多。
在scanf()中,*号的使用,与在printf()中的使用效果是完全不一样的。
%*.*s,(1)点前面的*表示输出结果总宽度,(2)点后面的*表示待输出的字符个数。
当*号在点前面时,如果*代表的参数值小于字符串的长度,则按原字符串的长度输出;如果*代表的参数值大于字符串的长度,则按参数长度输出,不足的在字符串左边补充空格。
当*号在点后面时,如果*代表的参数值小于字符串的长度,则按参数值的长度输出;如果*代表的参数值大于字符串的长度,则按字符串实际长度输出。
#include <stdio.h> int main() { int a = 20; int b = 5; char s[] = "Hello world!"; /* 字符串总长度为12 */ printf("0123456789----------\n"); printf("%s\n", s); printf("%5s\n", s); printf("%20s\n", s); printf("%.5s\n", s); printf("%.20s\n", s); printf("%20.5s\n", s); printf("%5.20s\n", s); printf("%20.s\n", s); printf("0123456789----------\n"); printf("%*s\n", a, s); /* 等同于printf("%20s\n", s) */ printf("%*.*s\n", a, b, s); /* 等同于printf("%20.5s\n", s) */ printf("%.*s\n", a, s); /* 等同于printf("%.20\n", s) */ return 0; }
输出结果:
0123456789----------
Hello world!
Hello world!
Hello world!
Hello
Hello world!
Hello
Hello world!
0123456789----------
Hello world!
Hello
Hello world!
在C语言中,float使用%f,而double使用%lf。
浮点型默认输出小数点后面6位。总长度中小数点也算一位 。在保留有效位的时候会进行四舍五入。
#include <stdio.h> int main() { float f = 3.14; double pi = 3.1415926; printf("0123456789----------\n"); printf("%f\n", f); printf("%lf\n", pi); printf("%5.3lf\n", pi); /* 会进行四舍五入*/ printf("%.10lf\n", pi); printf("%15.10lf\n", pi); printf("%*.*lf\n", 15, 10, pi); /* 同printf("%15.10lf\n", pi); */ return 0; }
输出结果:
0123456789----------
3.140000
3.141593
3.142
3.1415926000
3.1415926000
3.1415926000
在scanf()函数中,添加了*的部分对应的输入会被忽略(枪毙掉),不会赋给参数。
#include <stdio.h> int main() { int a = 0; int b = 0; int c = 0; printf("a = %d, b = %d, c = %d\n", a, b, c); scanf("%*d%d%d", &a, &b, &c); printf("a = %d, b = %d, c = %d\n", a, b, c); a = 0; b = 0; c = 0; scanf("%d%*d%d", &a, &b, &c); printf("a = %d, b = %d, c = %d\n", a, b, c); return 0; }
运行结果如下:
a = 0, b = 0, c = 0
23 45 61
a = 45, b = 61, c = 0
10 20 30
a = 10, b = 30, c = 0
如:
#include <stdio.h>
int main()
{
char s1[10] = {'\0'};
char s2[10] = {'\0'};
char s3[10] = {'\0'};
scanf("%*s%*s%s", s1, s2, s3);
printf("s1 = %s, s2 = %s, s3 = %s\n", s1, s2, s3);
return 0;
}
运行结果:
hello apple nice
s1 = nice, s2 = , s3 =
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。