1.5 printf()函数格式化输出 颜色控制 光标控制的使用方法

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";

 

  1. 标志字符为-、+、#、空格和0五种,其意义下表所示:
    标志字符表
    标志字符标 志 意 义
    -结果左对齐,与最小宽度一起使用,默认右对齐,可以与‘+’, 空格, '#'一起使用。
    +输出值为正时冠以正号,不适用于c,s类型,可以与‘-’, '0'一起使用。
    空格输出值为正时冠以空格,不适用于c,s类型,可以与‘-’, '0'一起使用。
    #

    不适用于c,s,d,u类型,不影响运行但会有编译告警;

    对o类,在输出时加前缀0;

    对x类,在输出时加前缀0x或者0X;

    对g,G 类防止尾随0被删除;

    对于所有的浮点形式,#保证了即使不跟任何数字,也打印一个小数点字符;

    可以与‘-’, '0'一起使用。

    0

    不适用于c,s类型, 

    对于所有的数字格式,用前导填充0,和最小宽度一起使用才有意义 。

    可以与‘+’, 空格, '#'一起使用。

  2. 输出最小宽度,用十进制整数来表示输出的最少位数。若实际位数多于定义的宽度,则按实际位数输出,若实际位数少于定义的宽度则补以空格或0。
  3. 精度,精度格式符以“.”开头,后跟十进制整数。意义是:如果输出浮点数,则表示小数的位数;如果输出是字符,则表示输出字符的个数;若实际位数大于所定义的精度数,则截去超过的部分。
  4. 长度,长度格式符为h,l两种,h表示按短整型量输出,l表示按长整型量输出。
  5. 格式字符已经在上面介绍过了。

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            >

 

五.打印颜色控制

  1. /033[30m -- /033[37m 设置前景色
  2. /033[40m -- /033[47m 设置背景色
字体&背景颜色对应表
 绿深绿白色
字体色3031323334353637
背景色4041424344454647

 

六.光标控制

  1. /033[nA    光标上移n行
  2. /033[nB    光标下移n行
  3. /033[nC    光标右移n行
  4. /033[nD     光标左移n行
  5. /033[y;xH  设置光标位置
  6. /033[2J     清屏
  7. /033[K      清除从光标到行尾的内容
  8. /033[s       保存光标位置
  9. /033[u       恢复光标位置
  10. /033[?25l  隐藏光标
  11. /033[?25h 显示光标
  12. /033[0m    关闭所有属性
  13. /033[1m    设置高亮度
  14. /033[4m    下划线
  15. /033[5m    闪烁
  16. /033[7m    反显
  17. /033[8m    消隐

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;
}

运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值