编程学习biancheng.45soft.com 本站提供了各种在线教程和资料,供大家学习与参考.
编程学习
当前位置: 主页 > C语言 > 输入和输出 > C语言 输入和输出 格式化输出printf函数

C语言 输入和输出 格式化输出printf函数

输出函数 printf 将内部数值转换为字符的形式。前面的有关章节中已经使用过该函数。下面只讲述该函数最典型的用法,附录 B 中给出了该函数完整的描述。

int printf(char *format, arg1, arg2, ...);

函数 printf 在输出格式 format 的控制下,将其参数进行转换与格式化,并在标准输出设备上打印出来。它的返回值为打印的字符数。


格式字符串包含两种类型的对象:普通字符和转换说明。在输出时,普通字符将原样不动地复制到输出流中,而转换说明并不直接输出到输出流中,而是用于控制 printf 中参数的转换和打印,每个转换说明都由一个百分号字符(即 % )开始,并以一个转换字符结束。在字符 % 和转换字符中间可能依次包含下列组成部分:

负号,用于指定被转换的参数按照左对齐的形式输出。
数,用于指定最小字段宽度。转换后的参数将打印不小于最小字段宽度的字段。如果有必要,字段左边( 如果使用左对齐的方式,则为右边 )多余的字符位置用空格填充以保证最小字段宽。
小数点,用于将字段宽度和精度分开。
数,用于指定精度,即指定字符串中要打印的最大字符数、浮点数小数点后的位数、整型最少输出的数字数目。
字母 h 或 l ,字母 h 表不将整数作为 short 类型打印,字母 l 表示将整数作为 long 类型打印。

表 7-1 列出了所有的转换字符,如果 % 后面的字符不是一个转换说明,则该行为是未定义的。

表 7-1  printf 函数基本的转换说明

d, i int 类型;十进制数  
o int 类型;无符号八进制数(没有前导 0 )  
x, X int 类型;无符号十六进制数(没有前导 0x 或 0X ), 10 ~ 15 分别用 abcdef 或 ABCDEF 表示  
u int 类型;无符号十进制数  
c int 类型;单个字符  
s char * 类型;顺序打印字符串中的字符,直到遇到 '\0' 或已打印了由精度指定的字符数为止  
f double 类型;十进制小数 [-]m.dddddd ,其中 d 的个数由精度指定(默认值为 6 )  
e, E double 类型;[-]m.dddddd e ±xx 或 [-]m.dddddd E ±xx ,其中 d 的个数由精度指定(默认值为 6 )  
g, G double 类型;如果指数小于 -4 或大于等于精度,则用 %e 或 %E 格式输出,否则用 %f 格式输出。尾部的 0 和小数点不打印  
p void * 类型;指针(取决于具体实现)  
% 不转换参数;打印一个百分号 % 

在转换说明中,宽度或精度可以用星号 * 表示,这时,宽度或精度的值通过转换下一参数(必须为 int 类型)来计算。例如,为了从字符串 s 中打印最多 max 个字符,可以使用下列语句:

printf("%.*s", max, s);

前面的章节中已经介绍过大部分的格式转换,但没有介绍与字符串相关的精度。下表说明了在打印字符串 "hello, world" ( 12 个字符)时根据不同的转换说明产生的不同结果。我们在每个字段的左边和右边加上冒号,这样可以清晰地表示出字段的宽度。

:%s:        :hello, world:
:%10s:      :hello, world:
:%.10s:     :hello, wor:
:%-10s:     :hello, world:
:%.15s:     :hello, world:
:%-15s:     :hello, world   :
:%15.10s:   :     hello, wor:
:%-15.10s:  :hello, wor     :

注意:函数 printf 使用第一个参数判断后面参数的个数及类型。如果参数的个数不够或者类型错误,则将得到错误的结果。请注意下面两个函数调用之间的区别:

printf(s);         /* FAILS if s contains % */
printf("%s", s);   /* SAFE */

函数 sprintf 执行的转换和函数 printf 相同,但它将输出保存到一个字符串中:

int sprintf(char *string, char *format, arg1, arg2, ...);

sprintf 函数和 printf 函数一样,按照 format 格式格式化参数序列 arg1 、 arg2 、 … ,但它将输出结果存放到 string 中,而不是输出到标准输出中。当然, string 必须足够大以存放输出结果。



练习 7-2 编写一个程序,以合理的方式打印任何输入。该程序至少能够根据用户的习惯以八进制或十六进制打印非图形字符,并截断长文本行。



编程学习 C语言 输入和输出 格式化输出printf函数 转载请保留此行.谢谢.

C语言