• printf()函数和scanf()函数能让用户可以与程序交流,他们是输出/输入函数,或简称为I/O函数,它们的工作原理几乎相同,两个函数都使用格式字符串和参数列表
  • printf()函数

    • 请求printf()函数打印数据的指令要与待打印数据的类型相匹配。占位符号被称为转换说明(conversion specification)

      • %a,浮点数,十六进制和p计数法
      • %A,浮点数、十六进制和p计数法
      • %c,单个字符
      • %d,有符号十进制整数
      • %e,浮点数,e计数法
      • %E,浮点数,e计数法
      • %f,浮点是,十进制数
      • %g,根据值的不同,自动选择%f或%e。%e用于指数小于-4或者大于等于精度时
      • %G,根据值的不同,自动选择%f或%e。%e用于指数小于-4或者大于等于精度时
      • %i,有符号十进制整数,与%d相同
      • %o,无符号八进制整数
      • %p,指针
      • %s,字符串
      • %u,无符号十进制整数
      • %x,无符号十六进制整数,使用十六进制数0f
      • %X,无符号十六进制整数,使用十六进制数0F
      • %%,打印一个百分号
  • 使用printf()函数

    • printf()函数格式,printf(格式字符串,待打印项,待打印项,……),其中格式化字符串是双引号括起来的内容,包含了待打印项的转换说明
    • 格式字符串包含两种不同形式的信息:

      • 实际要打印的字符,字面字符
      • 转换说明
  • printf()转换说明修饰符

    • 在%和转换字符之间插入修饰符可修饰基本的转换说明

      • 标记| -、+、空格、#和0。可以使用或不使用多个标记
      • 数字| 最小字段宽度
      • .数字| 精度
        对于%e和%f,表示小数点右边数字的位数,只是用.表示其后跟随一个0
        对于%g,表示有效数字的最大位数
        对于%s,表示待打印字符的最大数量
        对于整型转换,表示待打印数字的最小位数,如有必要,使用前导0来达到这个位数
      • h | 和整型转换说明一起使用,表示short int或unsigned short int类型的值
      • hh | 和整型转换说明一起使用,表示signed char 或 unsigned char类型的值
      • l | 和整型转换说明一起使用,表使long int 或 unsigned long类型的值
      • ll | 表示long long int 或 unsigned long long int 类型的值
      • L | 和浮点转换说明一起使用,表示long double类型的值
      • z | 和整型转换说明使用,表示size\_t的值
    • sizeof运算符以字节为单位返回类型或值的大小。标准规定了该值是无符号整数
    • 对于浮点类型,有用于double和long double类型的转换说明,却没有float的转换说明。这是因为在K&R C中,表达式或参数中的float类型值会被自动转换成double类型
    • printf()中的标记

      • - | 待打印项左对齐
      • + | 有符号值若为正,则在值钱显示加号;若为负,显示减号
      • 空格 | 有符号值若为正,在值前显示前导空格;若为负,显示减号并覆盖空格
      • # | 把结果转换成另一种形式。如果是%o格式,则以0开始;如果是%x格式,则以0x开始,对于所有浮点格式,保证即使后面没有任何数字,也打印一个小数点字符;对于%g,防止结果后面的0被删除
      • 0 | 对于数值格式,用前导0代替空格填充字段宽度,对于整数格式,如果出现-标记或指定精度,则忽略该标记
  • 转换说明的意义

    • 转换不匹配

      • 转换说明把二进制格式存储在计算机中的值转换成一系列字符以便于表示。转换(conversion)可能会五代读者认为原始值被替换成转换后的值。实际上转换说明是翻译说明
      • 系统使用二进制补码来表示有符号整数
      • 以256为模(modulo 256),即该数字除以256后取其余数
      • 取模运算
      • 参数传递、
    • printf()的返回值

      • printf()返回打印字符的个数,如有输出错误,printf()则返回一个负值。
      • printf()的返回值是其打印输出功能的附带用途,通常很少用到
      • 注意计算针对所有字符数,包括空格和不可见的换行符
    • 打印较长字符串

      • 断行,在参数之间换行
      • 使用多个printf()语句,以没有\n字符结束
      • 使用\反斜杠和回车可在字符串中换行
      • ANSI C引入的字符串连接。在两个用双引号括起来的字符串之间用空白隔开,C编译器会把多个字符串看作是一个字符串
最后修改:2024 年 03 月 06 日