- printf中的字符包括以下三种:以%开头的格式控制字符,以\开头的转义字符,普通字符。
- 双引号中出现一个%,后面一定要跟随一个输出常量,变量或表达式。
- 两个连续的%表示输出一个%。
- 一旦出现格式控制字符和转义字符,它们立即会寻找后面紧跟着的字符进行组合,但是它们前面的算普通字符。如:
printf("a,%c\n",t);
%c只能算一个字符,它会输出t中的字符。\n又算一个字符,它会输出回车。而前面的”a,”只能算普通字符,会原样输出。 - 在格式控制串中,格式说明与输出项从左到右在类型上必须一一对应匹配。如果不匹配,数据不能正确输出,这时系统并不报错。如:
printf("%d,%d",i);
因为只有一个参数,第二个%d会输出一个乱码。 - %m.nf指定输出的数据共有m位,其中有n位小数。如果数值长度小于m,则左端补空格;如果长度超过m,原样输出。%-m.nf与%m.nf基本相同,只是使输出的数值向左端靠,右端补空格。
- 用f或lf格式打印浮点数时,系统会自动四舍五入。
- 格式控制符除了X,E,G外,其他字符必须用小写字母。
- 原本字符常量只能是一个字符,但是因为有些字符看不见或不好表达,所以特殊的字符常量可以是多个字符,它们以\开头后面跟着其他字符,这也叫转义字符。
下面是C语言中的所有转义字符:
\n 回车换行
\t 横向跳格(Tab键)
\v 竖向跳格(打印机专用)
\r 回车
\f 换页(打印机专用)
\b 退格(BackSpace键)
\\ 反斜杠 \
\’单引号 ’
\”双引号 ”
\ddd以八进制形式代表的ASCII字符
\xhh以十六进制形式代表的ASCII字符
\0空值
printf("%c",'\x41')
会输出字符A。 - 格式控制字符“%”只能在printf和scanf中使用,而转义字符“\”可以用在所有字符和字符串处理函数中。
- 转义字符会娶后面所有符合条件的字符,并且只取一次,就失去作用,后面的都按普通字符输出。如:\x41n会输出An。
#include <stdio.h>
int main()
{
long FmtLong=99999999; /*长整型*/
double FmtDouble=88888888.88888888; /*双精度数*/
int FmtInt1=3,FmtInt2=4; /*两个普通整型*/
/*整数输出*/
printf("输出整数:");
printf("%d\n",13); /*输出整数*/
printf("输出整数:");
printf("%i\n",-13); /*输出整数*/
printf("输出无符号整数:");
printf("%u\n",+13); /*输出无符号整数*/
printf("输出单个字符:");
printf("%c\n",'X'); /*输出单个字符*/
printf("输出长整型:");
printf("%ld\n",FmtLong); /*输出长整型*/
printf("以16进制输出整数,没有正负数:");
printf("%x\n",13); /*以16进制输出整数,没有正负数*/
printf("以8进制输出整数,没有正负数:");
printf("%o\n",13); /*以8进制输出整数,没有正负数*/
/*控制输出*/
printf("控制宽度输出,左端补空格:");
printf("%3d\n",13); /*控制宽度输出,左端补空格*/
printf("控制宽度输出:");
printf("%2d\n",1234); /*控制宽度输出*/
printf("控制宽度输出也适用于长整型:");
printf("%2ld\n",FmtLong); /*控制宽度输出也适用于长整型*/
printf("格式串后面的字符为普通字符:");
printf("%2ld3\n",FmtLong); /*格式串后面的字符为普通字符*/
/*浮点输出*/
printf("\n"); /*输出一个换行*/
printf("输出浮点数:");
printf("%f\n",100.33); /*输出浮点数*/
printf("以指数形式输出浮点数:");
printf("%e\n",100.33); /*以指数形式输出浮点数*/
printf("以指数形式输出浮点数:");
printf("%E\n",100.33); /*以指数形式输出浮点数*/
printf("由系统决定采用f还是e格式输出:");
printf("%g\n",100.33); /*由系统决定采用%f还是%e格式输出*/
printf("输出长浮点型:");
printf("%lf\n",FmtDouble); /*输出长浮点型*/
printf("控制有效位数,左端补空格:");
printf("%8.1fok\n",100.33); /*控制有效位数,左端补空格*/
printf("控制有效位数,右端补空格:");
printf("%-8.1fok\n",100.33); /*控制有效位数,右端补空格*/
/*特殊输出*/
printf("输出一个换行:");
printf("\n"); /*输出一个换行*/
printf("输出一个百分号:");
printf("%%\n"); /*输出一个百分号*/
/*字符串输出*/
printf("用变量方式输出字符串:");
printf("%s\n","诸葛亮出山前也没带过兵啊,你们凭啥要我有工作经验"); /*用变量方式输出字符串*/
printf("原样输出字符串:");
printf("诸葛亮出山前也没带过兵啊,你们凭啥要我有工作经验\n"); /*原样输出字符串*/
printf("混合输出:");
printf("诸葛亮出山前也没带过兵啊,%s\n","你们凭啥要我有工作经验"); /*混合输出*/
/*综合输出*/
printf("同时输出好几个数据:");
printf("%ld,%lf\n",FmtLong,FmtDouble); /*同时输出好几个数据*/
printf("直接输出结果:");
printf("%d\n",FmtInt1*FmtInt2); /*直接输出结果*/
printf("用漂亮的格式输出结果:");
printf("%d*%d=%d\n",FmtInt1,FmtInt2,FmtInt1*FmtInt2); /*用漂亮的格式输出结果*/
return 0;
}
运行结果
转义字符的使用
#include <stdio.h>
int main()
{
printf("没有转义字符:");
printf("abc"); /*没有转义字符*/
printf("d");
printf("\n");
printf("回车:");
printf("abc\r"); /*回车\r */
printf("d");
printf("\n");
printf("退格:");
printf("abc\b"); /*退格\b */
printf("d");
printf("\n");
printf("竖向跳格只作用在打印机上,这里是乱码:");
printf("abc\v"); /*竖向跳格只作用在打印机上,这里是乱码\v\f */
printf("d");
printf("\n");
printf("引号和右斜杠只能用转义字符输出:");
printf("\\\n");
printf("\'\n");
printf("空字符\n:");
printf("\0\0\0"); /*什么也不干*/
printf("用ASCII码输出:");
printf("\101\n"); /*用八进制输出ASCII码*/
printf("\x42\n"); /*用十六进制输出ASCII码*/
printf("制表符演示:\n");
printf("%d\t%d\t%d\t\n",1,2,3);
printf("%d\t%d\t%d\t\n",10,20,30);
printf("%d\t%d\t%d\t\n",9999,200,333);
printf("-------------------------\n");
printf("│ %d\t│ %d\t│ %d\t│\n",1,2,3);
printf("-------------------------\n");
printf("│ %d\t│ %d\t│ %d\t│\n",10,20,30);
printf("-------------------------\n");
printf("│ %d\t│ %d\t│ %d\t│\n",9999,200,333);
printf("-------------------------\n");
return 0;
}
运行结果