赞
踩
printf()调用格式: printf("<格式化字符串>", <参量表>);
printf可以说是学习C语言最先接触的一个库函数,大家也肯定知道它的作用就是用来打印,其实它有很多功能。
目录
直接打印字符串,这是最基础的使用方法,就像我们学习的第一个hello world就是最好的例子。
- printf("Hello World!\n");
-
- char str[20] = "Hello World!\n";
- printf(str);
printf()可以打印整型,浮点型,字符和字符串参数,可以选择八进制/十进制/十六进制打印整型。
各数据类型与格式字符的对应关系:
- %d,%i 十进制有符号整数,适用于 int; short; char;
- %u 十进制无符号整数,适用于 unsigned int; unsigned short; unsigned char;
- %hd 十进制有符号短整数,适用于 short; char;
- %hu 十进制有符号短整数,适用于 unsigned short; unsigned char;
- %ld 十进制有符号长整数,适用于 long;
- %lu 十进制有符号长整数,适用于 unsigned long;
- %lld 十进制有符号长长整数,适用于 long long;
- %llu 十进制有符号长长整数,适用于 unsigned long long;
- %c 单字符,适用于 char;
- %s 字符串,适用于 char *;
- %f,%lf 浮点数,适用于 float; double;
- %e,%E 指数形式的浮点数,适用于 float; double;
- %p 指针的值,适用于所有指针类型;
- %x,%X 无符号以十六进制表示的整数,适用于所有整型;
- %o 无符号以八进制表示的整数,适用于所有整型;
- %g,%G 浮点数,不显示无意义的0,适用于 float; double;
-
- %% "%",因为%表示格式打印的开头,所以用两个%号表示一个%.

转义字符主要用来表示那些不能显示的ASCII字符,所有的ASCll码都可以用“\”加数字(一般是8进制数字)来表示。
所有的转义字符和所对应的意义:
| 转义字符 | 意义 | ASCII码值(十进制) |
| \a | 响铃(BEL) | 007 |
| \b | 退格(BS) ,将当前位置移到前一列 | 008 |
| \e | 控制符(esc),表示其后面是控制命令 | 033 |
| \f | 换页(FF),将当前位置移到下页开头 | 012 |
| \n | 换行(LF) ,将当前位置移到下一行开头 | 010 |
| \r | 回车(CR) ,将当前位置移到本行开头 | 013 |
| \t | 水平制表(HT) (跳到下一个TAB位置) | 009 |
| \v | 垂直制表(VT) | 011 |
| \\ | 代表一个反斜线字符''\' | 092 |
| \' | 代表一个单引号(撇号)字符 | 039 |
| \" | 代表一个双引号字符 | 034 |
| \? | 代表一个问号 | 063 |
| \0 | 空字符(NUL) | 000 |
| \ddd | 1到3位八进制数所代表的任意字符 | 三位八进制 |
| \xhh | 1到2位十六进制所代表的任意字符 | 二位十六进制 |
ASCll码表:
但打印不整齐时,我们可以使用格式化打印进行对其。其的格式是:
%[标志][输出最小宽度][.精度][长度]格式字符
e.g. "%7.2s", 输入"MAKEFILE", 输出" MA";
| 标志字符 | 标 志 意 义 |
| - | 结果左对齐,与最小宽度一起使用,默认右对齐,可以与‘+’, 空格, '#'一起使用。 |
| + | 输出值为正时冠以正号,不适用于c,s类型,可以与‘-’, '0'一起使用。 |
| 空格 | 输出值为正时冠以空格,不适用于c,s类型,可以与‘-’, '0'一起使用。 |
| # | 不适用于c,s,d,u类型,不影响运行但会有编译告警; 对o类,在输出时加前缀0; 对x类,在输出时加前缀0x或者0X; 对g,G 类防止尾随0被删除; 对于所有的浮点形式,#保证了即使不跟任何数字,也打印一个小数点字符; 可以与‘-’, '0'一起使用。 |
| 0 | 不适用于c,s类型, 对于所有的数字格式,用前导填充0,和最小宽度一起使用才有意义 。 可以与‘+’, 空格, '#'一起使用。 |
e.g: 整型类型格式化打印实验用例:
- #include <stdio.h>
-
- int main()
- {
- int a = 0;
-
- printf("input a=");
- while(scanf("%d", &a))
- {
- printf("a<%%d >=<%d>\n", a);
- printf("a<%%9d >=<%9d>\n", a);
- printf("a<%%-d >=<%-d>\n", a); /* -左对齐只有在给出最小宽度时才有意义 */
- printf("a<%%-9d >=<%-9d>\n", a);
- printf("a<%%+d >=<%+d>\n", a);
- printf("a<%% d >=<% d>\n", a);
- printf("a<%%+9d >=<%+9d>\n", a);
- printf("a<%% 9d >=<% 9d>\n", a);
- printf("a<%%-+9d >=<%-+9d>\n", a);
- printf("a<%% -9d >=<% -9d>\n", a);
- /*printf("a<%% d>=<% d>\n", a);*/ /* 会产生告警,运行效果和"% d"一样 */
- printf("a<%%0d >=<%0d>\n", a); /* 0补0只有在给出最小宽度时才有意义 */
- printf("a<%%09d >=<%09d>\n", a);
- printf("a<%%+09d >=<%+09d>\n", a);
- printf("a<%% 09d >=<% 09d>\n", a);
-
- /*printf("a<%%#d >=<%#d>\n", a);*/ /* 会产生告警,运行效果和不加#是一样的 */
- printf("a<%%#o >=<%#o>\n", a);
- printf("a<%%#x >=<%#x>\n", a);
- printf("a<%%#15X >=<%#15X>\n", a);
- printf("a<%%-#15X>=<%-#15X>\n", a);
- printf("a<%%0#15X>=<%0#15X>\n", a);
-
- printf("\ninput a=");
- }
-
- printf("\n");
- return 0;
- }

运行结果:
- input a=100
- a<%d >=<100>
- a<%9d >=< 100>
- a<%-d >=<100>
- a<%-9d >=<100 >
- a<%+d >=<+100>
- a<% d >=< 100>
- a<%+9d >=< +100>
- a<% 9d >=< 100>
- a<%-+9d >=<+100 >
- a<% -9d >=< 100 >
- a<%0d >=<100>
- a<%09d >=<000000100>
- a<%+09d >=<+00000100>
- a<% 09d >=< 00000100>
- a<%#o >=<0144>
- a<%#x >=<0x64>
- a<%#15X >=< 0X64>
- a<%-#15X>=<0X64 >
- a<%0#15X>=<0X0000000000064>

e.g: 浮点类型格式化打印实验用例:
- #include <stdio.h>
-
- int main()
- {
- double a = 0;
-
- printf("input a=");
- while(scanf("%lf", &a))
- {
- printf("a<%%f >=<%f>\n", a);
- printf("a<%%lf >=<%lf>\n", a);
- printf("a<%%g >=<%g>\n", a);
- printf("a<%%15f >=<%15f>\n", a);
- printf("a<%%15.3f>=<%15.3f>\n", a);
- printf("a<%%.3f >=<%.3f>\n", a);
- printf("a<%%-f >=<%-f>\n", a); /* -左对齐只有在给出最小宽度时才有意义 */
- printf("a<%%-15f >=<%-15f>\n", a);
- printf("a<%%+f >=<%+f>\n", a);
- printf("a<%% f >=<% f>\n", a);
- printf("a<%%+15f >=<%+15f>\n", a);
- printf("a<%% 15f >=<% 15f>\n", a);
- printf("a<%%-+15f>=<%-+15f>\n", a);
- printf("a<%% -15f>=<% -15f>\n", a);
- printf("a<%%0f >=<%0f>\n", a); /* 0补0只有在给出最小宽度时才有意义 */
- printf("a<%%015f >=<%015f>\n", a);
- printf("a<%%+015f>=<%+015f>\n", a);
- printf("a<%% 015f>=<% 015f>\n", a);
-
- printf("a<%%#f >=<%#f>\n", a);
- printf("a<%%#g >=<%#g>\n", a);
- printf("a<%%#15f >=<%#15f>\n", a);
- printf("a<%%-#15f>=<%-#15f>\n", a);
- printf("a<%%0#15f>=<%0#15f>\n", a);
-
- printf("\ninput a=");
- }
- printf("\n");
- return 0;
- }

运行结果:
- input a=1.1
- a<%f >=<1.100000>
- a<%lf >=<1.100000>
- a<%g >=<1.1>
- a<%15f >=< 1.100000>
- a<%15.3f>=< 1.100>
- a<%.3f >=<1.100>
- a<%-f >=<1.100000>
- a<%-15f >=<1.100000 >
- a<%+f >=<+1.100000>
- a<% f >=< 1.100000>
- a<%+15f >=< +1.100000>
- a<% 15f >=< 1.100000>
- a<%-+15f>=<+1.100000 >
- a<% -15f>=< 1.100000 >
- a<%0f >=<1.100000>
- a<%015f >=<00000001.100000>
- a<%+015f>=<+0000001.100000>
- a<% 015f>=< 0000001.100000>
- a<%#f >=<1.100000>
- a<%#g >=<1.10000>
- a<%#15f >=< 1.100000>
- a<%-#15f>=<1.100000 >
- a<%0#15f>=<00000001.100000>
-
- input a=q

e.g: 字符串格式化打印实验用例:
- #include <stdio.h>
-
- int main()
- {
- char a[20] = "hello world!";
-
- printf("input a=");
- scanf("%19s", a);
-
- printf("a<%%s >=<%s>\n", a);
- printf("a<%%15s >=<%15s>\n", a);
- printf("a<%%15.3s >=<%15.3s>\n", a);
- printf("a<%%.3s >=<%.3s>\n", a);
- printf("a<%%-s >=<%-s>\n", a); /* -左对齐只有在给出最小宽度时才有意义 */
- printf("a<%%-15s >=<%-15s>\n", a);
- printf("a<%%-15.3s>=<%-15.3s>\n", a);
-
- printf("\n");
- return 0;
- }

运行结果:
- input a=linux
- a<%s >=<linux>
- a<%15s >=< linux>
- a<%15.3s >=< lin>
- a<%.3s >=<lin>
- a<%-s >=<linux>
- a<%-15s >=<linux >
- a<%-15.3s>=<lin >
| 黑 | 红 | 绿 | 黄 | 蓝 | 紫 | 深绿 | 白色 | |
| 字体色 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 |
| 背景色 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 |
e.g:
- #include <stdio.h>
-
- #define NONE "\e[0m"
- #define BLACK "\e[0;30m"
- #define L_BLACK "\e[1;30m"
- #define RED "\e[0;31m"
- #define L_RED "\e[1;31m"
- #define GREEN "\e[0;32m"
- #define L_GREEN "\e[1;32m"
- #define BROWN "\e[0;33m"
- #define YELLOW "\e[1;33m"
- #define BLUE "\e[0;34m"
- #define L_BLUE "\e[1;34m"
- #define PURPLE "\e[0;35m"
- #define L_PURPLE "\e[1;35m"
- #define CYAN "\e[0;36m"
- #define L_CYAN "\e[1;36m"
- #define GRAY "\e[0;37m"
- #define WHITE "\e[1;37m"
-
- #define BG_BLACK "\e[40m"
- #define BG_RED "\e[41m"
- #define BG_GREEN "\e[42m"
- #define BG_YELLOW "\e[43m"
- #define BG_BLUE "\e[44m"
- #define BG_PURPLE "\e[45m"
- #define BG_CYAN "\e[46m"
- #define BG_WHITE "\e[47m"
-
- #define BOLD "\e[1m"
- #define UNDERLINE "\e[4m"
- #define BLINK "\e[5m"
- #define REVERSE "\e[7m"
- #define HIDE "\e[8m"
- #define CLEAR "\e[2J"
- #define CLRLINE "\r\e[K"
-
- int main()
- {
- printf("---------------字体颜色控制----------------\n");
-
- printf(BLACK BG_WHITE "BLACK " NONE L_BLACK "L_BLACK\n" NONE);
- printf(RED "RED " L_RED "L_RED\n" NONE);
- printf(GREEN "GREEN " L_GREEN "L_GREEN\n" NONE);
- printf(BROWN "BROWN " YELLOW "YELLOW\n" NONE);
- printf(BLUE "BLUE " L_BLUE "L_BLUE\n" NONE);
- printf(PURPLE "PURPLE " L_PURPLE "L_PURPLE\n" NONE);
- printf(CYAN "CYAN " L_CYAN "L_CYAN\n" NONE);
- printf(GRAY "GRAY " WHITE "WHITE\n" NONE);
-
- printf("---------------背景颜色控制----------------\n");
-
- printf(BG_BLACK "BG_BLACK " NONE "\n");
- printf(BG_RED "BG_RED " NONE "\n");
- printf(BG_GREEN "BG_GREEN " NONE "\n");
- printf(BG_YELLOW "BG_YELLOW " NONE "\n");
- printf(BG_BLUE "BG_BLUE " NONE "\n");
- printf(BG_PURPLE "BG_PURPLE " NONE "\n");
- printf(BG_CYAN "BG_CYAN " NONE "\n");
- printf(BG_WHITE "BG_WHITE " NONE "\n");
-
- printf("\n");
- return 0;
- }

运行结果:

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。