本节书摘来自异步社区《C语言编程初学者指南》一书中的第2章,第2.5节,作者【美】Keith Davenport(达文波特) , M1ichael Vine(维恩),更多章节内容可以访问云栖社区“异步社区”公众号查看
2.5 使用转换修饰符
由于信息是以二进制数据的形式存储在计算机内存中的,并且一系列的1和0读起来并不是特别有趣,作为C程序员,你必须特意告诉printf()这样的输入或输出函数,如何以一种对人类更加友好的形式把数据显示为信息。可以使用叫做转换修饰符(conversion specifier)的字符组合来完成这一貌似困难的任务。
转换修饰符由两个字符组成:第1个字符是一个百分号(%),第2个字符是一个特殊字符,告诉程序如何转换数据。表2.3描述了针对本章所讨论的数据类型最常使用的转换修饰符。
2.5.1 用printf()显示整数数据类型
%d转化修饰符和一条printf()语句一起使用,来显示整数数据类型:
printf("%d", 55);
上面的语句会打印出如下的文本:
55
也可以使用%d转换修饰符来显示声明为整数数据类型的一个变量的内容,如下所示:
int operand1;
operand1 = 29;
printf("The value of operand1 is %d", operand1);
在上面的语句中,我们声明了一个新的、名为operand1的整数变量。接下来,我们将数字29赋值给这个新创建的变量,并且使用printf()函数和转换修饰符%d来显示其内容。
要使用printf()函数显示的每一个变量,都必须放在圆括号中并且用逗号(,)隔开。
2.5.2 用printf()显示浮点数据类型
要显示浮点数值,像下面这样使用%f转换修饰符。
printf("%f", 55.55);
如下是%f转换修饰符的另一个例子,它打印出浮点变量的内容:
float result;
result = 3.123456;
printf("The value of result is %f", result);
尽管%f转换修饰符能够显示浮点数,但它还不能够按照正确的或想要的精度来显示浮点数。如下的printf()函数解决了精度的问题:
printf("%f", 55.55);
这个printf()示例以小数点后面6位的精度来输出一个浮点数,如下所示:
55.550000
要创建带有精度的浮点数,在转换修饰符的%符号和f字符之间使用不同的数字方案,来调整转换修饰符:
printf("%.1f", 3.123456);
printf("\n%.2f", 3.123456);
printf("\n%.3f", 3.123456);
printf("\n%.4f", 3.123456);
printf("\n%.5f", 3.123456);
printf("\n%.6f", 3.123456);
以上代码会产生如下的输出:
3.1
3.12
3.123
3.1234
3.12345
3.123456
注意,我们在上面的每一条打印语句的前面(除了第1行代码之外)都添加了一个n转义序列。没有这个换行转义序列的话,每条语句的输出都将会在同一行,这会使得输出很难阅读。
2.5.3 用printf()显示字符数据类型
使用%c转换修饰符,可以很容易地显示字符:
printf("%c", 'M');
这条语句的输出只是一个单个的字母M。和其他的转换修饰符一样,我们可以使用%c转换修饰符和一个printf()函数来输出一个字符类型的变量的内容,如下所示:
char firstInitial;
firstInitial = 'S';
printf("The value of firstInitial is %c", firstInitial);
可以在单个的printf()函数中,使用多个转换修饰符:
char firstInitial, middleInitial, lastInitial;
firstInitial = 'M';
middleInitial = 'A';
lastInitial = 'V';
printf("My Initials are %c.%c.%c.", firstInitial, middleInitial, lastInitial);
上面的程序语句的输出如下所示:
My Initials are M.A.V.
注意,在下面的语句中,要用printf()函数显示的每一个变量,都放在双引号之外,并且用一个逗号隔开:
printf("My Initials are %c.%c.%c.", firstInitial, middleInitial, lastInitial);
printf()的双引号之中的文本,是给可显示的文本、转换修饰符和转义序列保留的。