输入与输出
概念说明
C 标准库通过 <stdio.h> 提供了基础输入输出能力。
程序最常接触的三条标准流分别是:
stdin:标准输入stdout:标准输出stderr:标准错误输出
终端输出最常见的是 printf、puts 和 putchar,终端输入最常见的是 scanf、getchar 和 fgets。
这些接口看起来都很基础,但一旦遇到格式控制、缓冲区长度和换行残留,就很容易出问题。
语法/规则
printf用格式化占位符输出数据,例如%d、%u、%f、%c、%s、%zu。scanf读取普通变量时,大多数情况下要传地址,例如&age。- 读取字符串时应限制长度,例如
%19s,避免缓冲区溢出。 - 需要读取整行文本时,
fgets往往比scanf("%s", ...)更适合。 getchar适合逐字符读取输入,putchar适合逐字符输出。scanf有返回值,应该用它判断本次是否成功读到期望数量的数据。- 混用
scanf和fgets时,要特别小心输入缓冲区中残留的换行符。
示例
| |
输出结果:
| |
常见错误
- 用
scanf读取普通变量时忘记传地址,例如把&age写成age。 - 读取字符串时不限制长度,导致缓冲区溢出风险。
- 混用
scanf和fgets时不处理残留换行,结果下一次读取直接得到空行。 - 使用错误的格式控制符,导致输出错乱或输入解析失败。
- 只关心读取动作本身,却不检查返回值,结果在输入不合法时继续使用脏数据。