4.4.1 printf() 函数

  • 转换说明 (conversion specification)

ANSI C 标准为 printf() 提供的转换说明:

image.png

4.4.2 使用 printf()

image.png

image.png

image.png

打印 % 使用 %% 方式

4.4.3 printf() 的转换说明修饰符

表中有些项需要编译器支持 C99:

image.png

image.png

1. 使用修饰符和标记的示例

image.png
image.png

image.png

image.png

image.png
image.png

2. 学以致用

4.4.4 转换说明的意义

1. 转换不匹配

  • %hd: short int, 2B

image.png
image.png

image.png

image.png
image.png

image.png

2. printf() 的返回值

  • 返回打印字符的个数
  • 有打印错误返回负数

image.png

3. 打印较长的字符串

image.png

4.4.5 使用 scanf()

image.png

image.png

image.png

image.png

1. 从 scanf() 角度看输入

读取字符串时自动添加 \0 .

  • scanf() 不常用

2. 格式字符串中的普通字符

除空格字符外的普通字符必须与输入字符串严格匹配

  1. scanf("%d,%d", &n, &m);

输入类似:

  1. 88,121
  2. 88, 121
  3. // 多行也行
  4. 88,
  5. 121

格式字符串中的空白意味着跳过下一个输入项前面的所有空白:

  1. scanf("%d ,%d", &n, &m)

输入类似:

  1. 88,121
  2. 88 ,121
  3. 88 , 121

除了 %c, 其他转换说明都会自动跳过待输入值前面所有的空白

3. scanf() 的返回值

  • 返回成功读取的项数

4.4.6 printf() 和 scanf() 的*修饰符

printf() 中的 * 的作用: 动态设置宽度:

image.png

scanf() 中的 * 的作用: 跳过输入的数字:

image.png

4.4.7 printf() 的用法提示

指定宽度可以实现列对齐的效果:

  1. printf("%9d %9d %9d\n", val1, val2, val3);

不指定过长的宽度:

  1. printf("Count Beppo ran %.2f miles in 3 hours.\n", distance);