第六章——字符型数据 第七节——使用 getchar 和 putchar 函数进行字符的输入与输出

第六章——字符型数据 第七节——使用 getchar 和 putchar 函数进行字符的输入与输出

亓翎_Re-Tikara Lv5

一、核心概念:单字符输入输出的“轻量级选手”

1.1 getcharputchar 的定义

  • getchar:从标准输入(键盘)读取一个字符(含空格、换行符),无需格式说明符。
    char ch = getchar();  // 直接赋值  
    
  • putchar:向标准输出(屏幕)输出一个字符,参数可以是字符常量、变量或 ASCII 码值。
    putchar('A');         // 输出字符 A  
    putchar(97);          // 输出字符 a(ASCII 码值)  
    

1.2 与 scanf/printf 的对比

特性 getchar/putchar scanf/printf
适用场景 单字符输入输出 格式化混合数据输入输出
空白处理 直接读取所有字符(含空格、换行) %c 需手动跳过空白符
效率 轻量级,适合简单操作 灵活但稍复杂

二、实战应用:典型用法与陷阱

2.1 基础示例:字符回显与过滤

char ch;  
while ((ch = getchar()) != '\n') {  // 读取直到换行  
    putchar(ch);                     // 输出字符  
}  

功能:逐字符回显输入内容,自动过滤换行符。

2.2 真题解析:输入缓冲区的陷阱

题目:以下代码的输出是什么?

#include <stdio.h>  
int main() {  
    char c1 = getchar(), c2 = getchar();  
    printf("c1=%c, c2=%d", c1, c2);  
}  

输入A(回车)
输出c1=A, c2=10c2 读取了换行符 \n 的 ASCII 码 10)。

2.3 常见错误与修复

错误类型 错误示例 修复方法
忽略换行符 getchar() 读取后未处理 \n 使用 while(getchar() != '\n') 清空缓冲区
混淆函数返回值类型 char ch = getchar() 可能截断 改用 int 类型存储返回值(getchar 返回 int 以兼容 EOF)

三、进阶技巧:控制字符与调试

3.1 输出控制字符

putchar 可直接输出转义字符:

putchar('\n');  // 换行  
putchar('\x07'); // 响铃(ASCII 码 7)  

3.2 输入验证与过滤

案例:仅允许输入数字字符:

char ch;  
while ((ch = getchar()) != '\n') {  
    if (ch >= '0' && ch <= '9') {  
        putchar(ch);  
    }  
}  

效果:输入 a1b2c3,输出 123


四、调试与优化:避免死循环与缓冲区污染

4.1 清空输入缓冲区

int c;  
while ((c = getchar()) != '\n' && c != EOF);  // 丢弃剩余字符  

用途:防止前一次输入残留影响后续 getchar() 读取。

4.2 处理 EOF(文件结束符)

getchar 在遇到文件结束符(Windows 下为 Ctrl+Z,Linux 下为 Ctrl+D)时返回 EOF(值为 -1):

int ch;  
while ((ch = getchar()) != EOF) {  
    putchar(ch);  
}  

五、总结:选择的艺术

  • getchar/putchar:适用于单字符输入输出,简洁高效,无需格式字符串。
  • scanf/printf:需处理混合数据或格式化时使用,但需注意空白符陷阱。

🎯 记忆口诀
单字符选 get/put,空白陷阱不用愁;混合输入 scanf 强,但要记得跳空格!

  • 标题: 第六章——字符型数据 第七节——使用 getchar 和 putchar 函数进行字符的输入与输出
  • 作者: 亓翎_Re-Tikara
  • 创建于 : 2026-02-07 02:21:28
  • 更新于 : 2026-02-10 02:48:46
  • 链接: https://re-tikara.fun/Blog/posts/22d79d1d/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。