本文对于C primer plus中有关int值打印相关内容以及代码做了一些转载以及赘述。
我们在C语言程序中可以使用printf()函数来打印一些我们所需要的值,例如我们熟知的int类型的值,%d这个占位符的含义是”转换说明“,它指定了printf()以什么样的形式来输出显示一个值。格式化字符串中的每一个%d都与待打印的变量列表中相对应的int值相匹配。
我们在编写程序时要注意转换说明的数量和待打印的值数量相等,编译器并不会发现这些错误,输出在下列代码printfInt.c中演示了printf()的一些特性,包括正确的编写和出现一些小错误会产生什么样的结果。
/*printInt.c-演示printf()函数的一些特性*/
#include<stdio.h>
int main(void)
{
int ten = 10;
int two = 2;
printf("计算两数差值:\n");
printf("Doing it right:");
printf("%d minus %d is %d\n", ten, 2, ten - two); //三个占位符对应三个参数
printf("Doing it wrong:");
printf("%d minus %d is %d\n", ten); //遗漏两个参数
return 0;
}
此处正确的输出为10 minus 2 is 8,不难看出表达的含义是简单的四则预算10-2=8,在第一列输出中第1个%d的是int类型变量ten,第二个%d代表的是int类型常量2,第三个%d代表的是int类型表达式ten-two的值。而在第二行输出中,第一个%d仍与第一行的作用相同,而之后的两个转换说明并没有变量给其提供任何的数值,所以在程序实际运行过程中,输出的结果为存储在内存中的任意值。
此处发生此类的问题的关键因素在于printf()的参数不确定,可能有1,2,3,或者多个,编译器无法识别出对应的参数是否已经一 一对应。所以程序员需要在使用printf()函数时确保转换说明(占位符)的数量与待打印的值的数量相等。