第六章——字符型数据 第六节——调用printf和scanf进行输入输出
一、基本概念:字符的输入输出规则
1.1 printf 和 scanf 的语法
使用前提: 必须调用
#include <stdio.h>输出字符:使用
printf函数,格式说明符为%c。1
2char ch = 'A';
printf("字符:%c\n", ch); // 输出:字符:A输入字符:使用
scanf函数,格式说明符为%c。1
2char ch;
scanf("%c", &ch); // 注意取地址符 &
1.2 宽度控制与格式化
printf可通过整数指定输出宽度:1
printf("字符:%5c\n", 'B'); // 输出右对齐,占5列:字符: B
二、输入陷阱与避坑指南
2.1 空白字符的处理问题
- 连续
%c输入:scanf("%c%c%c", &a, &b, &c)会将空格、换行符视为有效字符。- 正确输入:
ABC(无空格) - 错误输入:
A B C(空格会被读入b和c)。
- 正确输入:
- 交叉输入数值与字符:
1
2int a1; char c1;
scanf("%d%c", &a1, &c1); // 输入 "10A" 合法,但 "10 A" 会导致 c1 读取空格
2.2 真题实战:输入格式陷阱
题目:以下哪种输入形式能正确为变量 a1=10, a2=20, c1='X', c2='Y' 赋值?
1 | scanf("%d%c%d%c", &a1, &c1, &a2, &c2); |
选项:
A. 10□X □20 □Y
B. 10 □X20 □Y
C. 10 □X<回车> 20 □Y
D. 10X<回车> 20Y
答案:D
解析:选项 D 中输入 10X 和 20Y 无多余空格,避免了 scanf 误读空白字符 。
三、进阶应用:字符与数值的混合输入
3.1 数值与字符的顺序冲突
- 问题:当
scanf中交替出现数值和字符变量时,数值输入后的换行符可能被字符变量误读。1
2
3int a; char c;
printf("输入数值:"); scanf("%d", &a);
printf("输入字符:"); scanf("%c", &c); // 此处会直接读取上一行的换行符! - 修复方法:在
scanf前添加空格跳过空白:1
scanf(" %c", &c); // 注意格式字符串前的空格
3.2 调试技巧:打印变量验证
1 | char ch; |
输出示例:输入 ' '(空格),输出:字符: ,ASCII 码:32
四、对比分析:scanf/printf vs getchar/putchar
| 特性 | scanf/printf |
getchar/putchar |
|---|---|---|
| 适用场景 | 格式化输入输出(含混合数据) | 单字符输入输出 |
| 空白处理 | 需手动跳过(如 " %c") |
直接读取所有字符(含空格) |
| 效率 | 适合复杂格式,稍慢 | 单字符操作,效率更高 |
示例对比:
1 | // 使用 scanf/printf |
五、总结:字符输入输出的核心法则
- 格式严格:
scanf的%c会读取所有字符,包括空格和换行符。 - 缓冲区陷阱:数值输入后需清除残留换行符,避免干扰后续字符输入。
- 宽度控制:
printf可通过%5c等格式调整输出对齐方式。
🎯 记忆口诀:
“字符输入 %c 精,空白陷阱需小心;数值字符混输入,空格跳过保太平!”
- 标题: 第六章——字符型数据 第六节——调用printf和scanf进行输入输出
- 作者: 亓翎_Re-Tikara
- 创建于 : 2026-02-07 02:21:28
- 更新于 : 2026-02-10 02:48:46
- 链接: https://re-tikara.fun/Blog/posts/30d7d9e/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。