printf⽤法⼤全,C语⾔printf格式控制符⼀览表
输⼊输出函数(printf 和 scanf)是中⾮常重要的两个函数,也是学习C语⾔必学的两个函数。在C语⾔程序中,⼏乎没有⼀个程序不需要这两个函数,尤其是输出函数(printf),所以这两个函数必须要掌握。
如果在程序中要使⽤ printf 或者 scanf,那么就必须要包含头⽂件 stdio.h。因为这两个函数就是包含在该头⽂件中的。
输出函数的功能是将程序运⾏的结果输出到屏幕上,⽽输⼊函数的功能是通过键盘给程序中的变量赋值。可以说输⼊输出函数是⽤户和计算机交互的接⼝。其中 printf 的功能很强⼤,⽤法很灵活,⽐较难掌握;⽽ scanf 的⽤法相对⽐较固定,但也有很多需要注意的地⽅。
本节我们先讲解 printf 的⽤法,稍后再讲解 scanf。
printf 的格式
printf 函数的原型为:
# include <stdio.h>
int printf(const char *format, ...);
在讲每⼀个函数的时候都会先把它的函数原型写出来,这个原型你们现在看不懂不要紧,等到学完C语⾔之后再来看这个原型就会发现它是很有参考意义的!它对深刻理解函数有着很⼤的价值。
printf 的格式有四种:
1) printf("字符串\n");
# include <stdio.h>
int main(void)
{
printf("Hello World!\n"); // \n表⽰换⾏
return 0;
}
其中\n表⽰换⾏的意思。它是⼀个转义字符,前⾯在讲字符常量的时候见过。其中 n 是“new line”的缩写,即“新的⼀⾏”。
此外需要注意的是,printf 中的双引号和后⾯的分号必须是在英⽂输⼊法下。双引号内的字符串可以是英⽂,也可以是中⽂。
2) printf("输出控制符",输出参数);
# include <stdio.h>
int main(void)
{
int i = 10;
printf("%d\n", i); /*%d是输出控制符,d 表⽰⼗进制,后⾯的 i 是输出参数*/
return 0;
}
这句话的意思是将变量 i 以⼗进制输出。
那么现在有⼀个问题:i 本⾝就是⼗进制,为什么还要将 i 以⼗进制输出呢?
因为程序中虽然写的是 i=10,但是在内存中并不是将 10 这个⼗进制数存放进去,⽽是将 10 的⼆进制代码存放进去了。计算机只能执⾏⼆进制 0、1 代码,⽽ 0、1 代码本⾝并没有什么实际的含义,它可以表⽰任何类型的数据。所以输出的时候要强调是以哪种进制形式输出。所以就必须要有“输出控制符”,以告诉操作系统应该怎样解读⼆进制数据。
如果是%x就是以⼗六进制的形式输出,要是%o就是以⼋进制的形式输出,⼤家⾃⼰试⼀下。
3) printf("输出控制符1 输出控制符2…", 输出参数1, 输出参数2, …);
# include <stdio.h>
int main(void)
{
int i = 10;
int j = 3;
printf("%d %d\n", i, j);
return 0;
}
输出控制符 1 对应的是输出参数 1,输出控制符 2 对应的是输出参数 2……编译、链接、执⾏后我们看⼀下输出结果:
10 3
注意⼀下,为什么 10 和 3 之间有⼀个空格?因为上⾯ %d 和 %d之间有空格,printf 中双引号内除了输出控制符和转义字符\n外,所有其余的普通字符全部都原样输出。⽐如:
# include <stdio.h>
int main(void)
{
int i = 10;
int j = 3;
printf("i = %d, j = %d\n", i, j);
return 0;
}
html符号代码对照表这时我们再编译、链接、执⾏⼀下:
i = 10, j = 3
i=、,、空格和j=全都原样输出了。此外需要注意的是:“输出控制符”和“输出参数”⽆论在“顺序上”还是在“个数上”⼀定要⼀⼀对应。
4) printf("输出控制符 ⾮输出控制符",输出参数);
这实际上就是上⾯那个例⼦。这时候会有⼀个问题:到底什么是“输出控制符”,什么是“⾮输出控制符”?很简单,凡是以%开头的基本上都是输出控制符。
输出控制符
常⽤的输出控制符主要有以下⼏个:
控制符说明
%d按⼗进制整型数据的实际长度输出。
%ld输出长整型数据。
%md m 为指定的输出字段的宽度。如果数据的位数⼩于 m,则左端补以空格,若⼤于 m,则按实际位数输出。
%u 输出⽆符号整型(unsigned)。输出⽆符号整型时也可以⽤ %d,这时是将⽆符号转换成有符号数,然后输出。但编程的时候最好不要这么写,因为这样要进⾏⼀次转换,使 CPU 多做⼀次⽆⽤功。
%c⽤来输出⼀个字符。
%f ⽤来输出实数,包括单精度和双精度,以⼩数形式输出。不指定字段宽度,由系统⾃动指定,整数部分全部输出,⼩数部分输出 6位,超过 6 位的四舍五⼊。
%.mf输出实数时⼩数点后保留 m 位,注意 m 前⾯有个点。
%o以⼋进制整数形式输出,这个就⽤得很少了,了解⼀下就⾏了。
⽤来输出字符串。⽤ %s 输出字符串同前⾯直接输出字符串是⼀样的。但是此时要先定义字符数组或字符指针存储或指向字符串,这
%s个稍后再讲。
%x(或 %X 或
以⼗六进制形式输出整数,这个很重要。
%#x 或 %#X)
%x、%X、%#x、%#X 的区别
⼀定要掌握 %x(或 %X 或 %#x 或 %#X),因为调试的时候经常要将内存中的⼆进制代码全部输出,然后⽤⼗六进制显⽰出来。下⾯写⼀个程序看看它们四个有什么区别:
# include <stdio.h>
int main(void)
{
int i = 47;
printf("%x\n", i);
printf("%X\n", i);
printf("%#x\n", i);
printf("%#X\n", i);
return 0;
}
在 V 6.0 中的输出结果:
2f
2F
0x2f
0X2F
从输出结果可以看出:如果是⼩写的x,输出的字母就是⼩写的;如果是⼤写的X,输出的字母就是⼤写的;如果加⼀个#,就以标准的⼗六进制形式输出。
最好是加⼀个#,否则如果输出的⼗六进制数正好没有字母的话会误认为是⼀个⼗进制数呢!总之,不加#容易造成误解。但是如果输出
0x2f 或 0x2F,那么⼈家⼀看就知道是⼗六进制。⽽且%#x和%#X中,笔者觉得⼤写的⽐较好,因为⼤写是绝对标准的⼗六进制写法。如何输出 %d、\ 和双引号
printf 中有输出控制符%d,转义字符前⾯有反斜杠\,还有双引号。那么⼤家有没有想过这样⼀个问题:怎样将这三个符号通过 printf 输出到屏幕上呢?
要输出%d只需在前⾯再加上⼀个%,要输出\只需在前⾯再加上⼀个\,要输出双引号也只需在前⾯加上⼀个\即可。程序如下:
# include <stdio.h>
int main(void)
{
printf("%%d\n");
printf("\\\n");
printf("\"\"\n");
return 0;
}
在 VC++ 6.0 中的输出结果是:
%d
\
""
⼩结
printf 是C语⾔中⾮常重要的⼀个函数。经过上⾯的学习我们发现,其实它并不难。只要多编程多练习,很快就能掌握。
其次学完本节之后要知道为什么需要“输出控制符”。因为计算机中所有的数据都是⼆进制 0、1 代码,所以输出的时候要⽤“输出控制符”告诉计算机以什么形式将⼆进制数据显⽰出来。
输出控制符中,%d、%f、%s、%c 是最常⽤的,它们分别是输出整数、实数、字符串和字符的控制符。%.mf 虽然⽤得不多,但⼀定要重视。
最后 %x、%X、%#x、%#X 四种⽤法的区别只需要了解⼀下即可。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。