第六章——字符型数据 第六节——调用printf和scanf进行输入输出

第六章——字符型数据 第六节——调用printf和scanf进行输入输出

亓翎_Re-Tikara Lv5

一、基本概念:字符的输入输出规则

1.1 printfscanf 的语法

  • 使用前提: 必须调用 #include <stdio.h>

  • 输出字符:使用 printf 函数,格式说明符为 %c

    1
    2
    char ch = 'A';  
    printf("字符:%c\n", ch); // 输出:字符:A
  • 输入字符:使用 scanf 函数,格式说明符为 %c

    1
    2
    char 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(空格会被读入 bc)。
  • 交叉输入数值与字符
    1
    2
    int 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 中输入 10X20Y 无多余空格,避免了 scanf 误读空白字符 。


三、进阶应用:字符与数值的混合输入

3.1 数值与字符的顺序冲突

  • 问题:当 scanf 中交替出现数值和字符变量时,数值输入后的换行符可能被字符变量误读。
    1
    2
    3
    int a; char c;  
    printf("输入数值:"); scanf("%d", &a);
    printf("输入字符:"); scanf("%c", &c); // 此处会直接读取上一行的换行符!
  • 修复方法:在 scanf 前添加空格跳过空白:
    1
    scanf(" %c", &c);  // 注意格式字符串前的空格  

3.2 调试技巧:打印变量验证

1
2
3
char ch;  
scanf("%c", &ch);
printf("读取的字符:%c,ASCII 码:%d\n", ch, ch);

输出示例:输入 ' '(空格),输出:字符: ,ASCII 码:32


四、对比分析:scanf/printf vs getchar/putchar

特性 scanf/printf getchar/putchar
适用场景 格式化输入输出(含混合数据) 单字符输入输出
空白处理 需手动跳过(如 " %c" 直接读取所有字符(含空格)
效率 适合复杂格式,稍慢 单字符操作,效率更高

示例对比

1
2
3
4
5
6
7
8
9
// 使用 scanf/printf  
char ch;
scanf("%c", &ch);
printf("字符:%c\n", ch);

// 使用 getchar/putchar
ch = getchar();
putchar(ch);
putchar('\n');

五、总结:字符输入输出的核心法则

  1. 格式严格scanf%c 会读取所有字符,包括空格和换行符。
  2. 缓冲区陷阱:数值输入后需清除残留换行符,避免干扰后续字符输入。
  3. 宽度控制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 进行许可。