C语言——putchar 与 getchar

一、核心功能

  • putchar 函数:相当于 "单个字符打印机",仅能输出 1 个字符(包括可见字符、换行符\n等控制字符)。
  • getchar 函数:相当于 "单个字符扫描仪",仅能读取 1 个字符(从键盘输入,包括回车、空格等)。

两者均属于 C 标准库<stdio.h>,是考研 408 真题中常考的基础 I/O 函数,重点考查返回值、缓冲机制和异常处理。

二、语法与用法

1. putchar 函数

  • 格式:int putchar(int ch);
  • 核心说明:参数ch:可以是字符常量(如'A')、字符变量(如char c='b'),或 ASCII 码值(如 97 对应'a')。
  • 返回值:++成功输出返回字符的 ASCII 码(int 型)++;失败返回 EOF(本质是 - 1)。
  • 考研常考示例:
cpp 复制代码
#include <stdio.h>
int main() {
    putchar('X');    // 输出:X
    putchar(10);     // 输出换行(10是'\n'的ASCII码)
    char c = 'Y';
    putchar(c);      // 输出:Y
    return 0;
}

2. getchar 函数

  • 格式:int getchar(void);
  • 核心说明:++无参数++,从键盘读取 1 个字符。
  • 返回值:++成功读取返回字符的 ASCII 码(int 型)++;读取结束(Ctrl+Z/Windows、Ctrl+D/Linux)或失败时返回 EOF。
  • 关键考点:返回值是 int 型(而非 char 型),因为 EOF(-1)无法用 unsigned char 存储(真题易错点!)。
  • 考研常考示例:
cpp 复制代码
#include <stdio.h>
int main() {
    int ch; // 必须用int接收,不能用char!
    printf("输入一个字符:");
    ch = getchar();  // 读取键盘输入的1个字符
    putchar(ch);     // 输出读取到的字符
    return 0;
}

三、考研核心考点与易错点

1. 缓冲机制(高频考点)

  • getchar 是 "行缓冲" 输入:输入后需按回车确认,回车符\n会存入缓冲区,下次调用 getchar 会优先读\n
  • 真题易错示例:
cpp 复制代码
// 问题:输入"A"并回车后,输出什么?
#include <stdio.h>
int main() {
    int ch1 = getchar();
    int ch2 = getchar();
    putchar(ch1);
    putchar(ch2);
    return 0;
}
  • 输出:A(换行)------ch1 读A,ch2 读缓冲区的\n
  • 解决方案:用getchar()吸收多余的\n,或清空缓冲区。

2. EOF 的应用(必考点)

  • EOF(End of File)表示输入结束,是循环读字符的常用条件。
  • 标准用法:
cpp 复制代码
#include <stdio.h>
int main() {
    int ch;
    // 循环读字符,直到Ctrl+Z/Ctrl+D结束
    while((ch = getchar()) != EOF) {
        putchar(ch); // 回显输入字符
    }
    return 0;
}

3. 常见误区

  • 误区 1:用char接收 getchar 返回值,无法正确判断 EOF。
  • 误区 2:认为 putchar 只能输出可见字符,忽略其可输出\n\t等控制字符。

四、真题总结

  • 核心考点:返回值类型(int)、缓冲机制、EOF 判断、换行符处理。
  • 解题技巧:遇 getchar/putchar 题,先分析缓冲区内容,再检查返回值与 EOF 处理。
相关推荐
奋斗的小青年!!11 小时前
Flutter跨平台开发OpenHarmony应用:个人中心实现
开发语言·前端·flutter·harmonyos·鸿蒙
石头wang11 小时前
jmeter java.lang.OutOfMemoryError: Java heap space 修改内存大小,指定自己的JDK
java·开发语言·jmeter
LawrenceLan11 小时前
Flutter 零基础入门(十五):继承、多态与面向对象三大特性
开发语言·前端·flutter·dart
zh_xuan11 小时前
kotlin对象表达式
开发语言·kotlin
froginwe1111 小时前
ECharts 旭日图:全面解析与应用指南
开发语言
yaoxin52112311 小时前
292. Java Stream API - 使用构建器模式创建 Stream
java·开发语言
JAY_LIN——811 小时前
C-语言联合体和枚举
c语言
落笔映浮华丶11 小时前
c程序的翻译过程 linux版
linux·c语言
CoderCodingNo11 小时前
【GESP】C++六级考试大纲知识点梳理, (2) 哈夫曼树、完全二叉树与二叉排序树
开发语言·c++
水饺编程11 小时前
第4章,[标签 Win32] :获取设备环境句柄的第一个方法
c语言·c++·windows·visual studio