getchar 和 putchar
1. getchar() - 字符输入函数
功能:
getchar()
函数用于从标准输入流(stdin),通常是键盘,读取一个字符。
原型:
int getchar(void);
参数:
void
表示它不需要任何参数。返回值:
成功时,返回读取的字符(虽然返回类型是
int
,但你可以将其视为char
)。如果遇到文件结束符(End-Of-File)或发生错误,则返回常量
EOF
(通常定义为 -1)。
工作原理:
getchar()
是一个“阻塞”函数,程序会暂停并等待用户输入。用户输入的字符会先被储存在一个叫“输入缓冲区”的内存区域中。当用户按下 Enter键(回车) 时,getchar()
才会开始从缓冲区中逐个读取字符。
关键点:
它一次只读取一个字符。
它会读取所有字符,包括空格、制表符(Tab)和换行符(
\n
)。常与循环结合使用,以便读取多个字符或整行输入。
因为其返回类型是
int
(为了能容纳EOF
),通常用一个int
型变量来接收它的返回值,而不是char
。
2. putchar() - 字符输出函数
功能:
putchar()
函数用于向标准输出流(stdout),通常是屏幕,输出一个字符。
原型:
int putchar(int char);
参数:
int char
- 要输出的字符。虽然参数类型是int
,但你传入一个char
类型的变量也可以。返回值:
成功时,返回输出的字符。
如果发生错误,则返回
EOF
。
关键点:
它一次只输出一个字符。
它是
printf(“%c”, c)
的一个更简单、更高效的替代品,当你只需要输出单个字符时。
示例代码
下面是一个简单的程序,演示了如何使用这两个函数。这个程序的功能是:读取用户输入的一个字符,然后立刻将其打印出来。
#include <stdio.h> // 必须包含的头文件int main() {int c; // 建议使用int类型变量来接收getchar的返回值printf("请输入一个字符(按下回车键结束): ");c = getchar(); // 从键盘获取一个字符,存入变量cprintf("您输入的字符是: ");putchar(c); // 将变量c中的字符输出到屏幕putchar('\n'); // 输出一个换行符,使显示更美观return 0;
}
运行结果:
请输入一个字符(按下回车键结束): A
您输入的字符是: A
更常见的用法:循环读取
getchar()
和 putchar()
真正的威力在于组合在循环中,可以实现复制输入到输出,或者逐字符处理文本。
下面的程序是一个经典例子,它模拟了 Ctrl+D
(Unix/Linux/Mac) 或 Ctrl+Z
(Windows) 组合键来结束输入。
#include <stdio.h>int main() {int c;printf("请输入一段文本(按Ctrl+D或Ctrl+Z结束): \n");// 这是一个经典范式:// 1. 调用getchar()并将返回值赋给c// 2. 判断c是否不等于EOF// 3. 如果不等于,执行循环体(输出字符),然后回到第1步while ((c = getchar()) != EOF) {putchar(c);}return 0;
}
这段代码的工作流程:
你输入
Hello
并按下回车。getchar()
会依次读取‘H‘’, ‘e’, ‘l’, ‘l’, ‘o’, ‘\n’
。每读取一个字符,
putchar(c)
就立刻输出这个字符。当所有字符都读取完毕后,循环再次等待你输入。
当你按下
Ctrl+D
(或Ctrl+Z
) 时,getchar()
返回EOF
,循环条件不满足,程序退出。
总结与对比
函数 | 功能 | 参数 | 返回值 | 常用场景 |
---|---|---|---|---|
getchar() | 输入一个字符 | 无 | 成功:读取的字符;失败/结束:EOF | 逐字符读取输入,清理输入缓冲区 |
putchar() | 输出一个字符 | 要输出的字符 (int ) | 成功:输出的字符;失败:EOF | 逐字符输出,是 printf(“%c”) 的简化版 |
简单记忆:
get
是“获取”,所以getchar
是获取字符。put
是“放置”,所以putchar
是放置(输出)字符。
它们虽然是简单的字符函数,但却是理解C语言I/O系统基础概念(如缓冲区、流、EOF)的基石。