读取字符
getchar 与 putchar
读取字符 是 CoddyKit 上的免费 C Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 C Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 C Academy 课程共包含 4 节课。
读取单个字符
C 提供了 getchar(),用于从标准输入一次读取一个字符;还提供了 putchar(),用于向标准输出写入一个字符。
这两个函数都位于 <stdio.h> 中。
#include <stdio.h>
int main(void) {
putchar('H');
putchar('i');
putchar('\n');
return 0;
}putchar 基础
putchar(c) 写入字符 c,并返回所写入的字符;如果发生错误,则返回 EOF。
这是输出单个字节的最简单方法。
#include <stdio.h>
int main(void) {
for (char c = 'A'; c <= 'E'; c++) {
putchar(c);
}
putchar('\n');
return 0;
}getchar 返回 int
getchar() 返回的是 int,而不是 char。这一点很重要,因为它必须能够返回 EOF,而这个值与任何真实字符都不同。
请始终将结果存储在 int 中。
#include <stdio.h>
int main(void) {
int c = 'A';
printf("Stored value: %d\n", c);
return 0;
}什么是 EOF
EOF 表示文件结束。当没有更多输入时,getchar() 会返回它。
它通常是值 -1,这就是为什么 getchar 使用 int,从而不会与字节 255 混淆。
#include <stdio.h>
int main(void) {
printf("EOF has value %d\n", EOF);
return 0;
}读取循环模式
经典模式会一直读取字符,直到遇到 EOF。由于这里没有交互式输入,循环会立即结束,但这就是标准结构。
- 在条件中进行赋值。
- 与
EOF进行比较。
#include <stdio.h>
int main(void) {
int c;
while ((c = getchar()) != EOF) {
putchar(c);
}
printf("Reached end of input\n");
return 0;
}统计字符数
一个常见任务是统计读取了多少个字符。在读取循环中递增计数器即可。
#include <stdio.h>
int main(void) {
int c;
long count = 0;
while ((c = getchar()) != EOF) {
count++;
}
printf("Read %ld characters\n", count);
return 0;
}以大写形式回显
您可以在写入字符之前先对其进行转换。这里读取的每个字符都会使用 toupper 转换为大写。
#include <stdio.h>
#include <ctype.h>
int main(void) {
int c;
while ((c = getchar()) != EOF) {
putchar(toupper(c));
}
return 0;
}统计行数
统计换行符的数量,就能知道读取了多少行。请将每个字符与 '\n' 进行比较。
#include <stdio.h>
int main(void) {
int c;
int lines = 0;
while ((c = getchar()) != EOF) {
if (c == '\n') lines++;
}
printf("Lines: %d\n", lines);
return 0;
}放回一个字符
ungetc(c, stdin) 会将一个字符放回输入流中,因此下一次读取时会再次返回该字符。
扫描时多读取了一个字符时,这个函数非常有用。
#include <stdio.h>
int main(void) {
ungetc('X', stdin);
int c = getchar();
printf("Got back: %c\n", c);
return 0;
}getchar 与 scanf
getchar 让您能够精确控制字节级别的读取,而 scanf 会解析格式化输入。
对于过滤器和分词器等逐字符处理任务,getchar 是合适的工具。
#include <stdio.h>
int main(void) {
int c = '5';
if (c >= '0' && c <= '9') {
printf("It is a digit: %c\n", c);
}
return 0;
}简单过滤器框架
过滤器从输入中读取内容,进行转换,然后写入输出。这个框架会从输入流中删除所有空格。
#include <stdio.h>
int main(void) {
int c;
while ((c = getchar()) != EOF) {
if (c != ' ') {
putchar(c);
}
}
return 0;
}快速检查
检验您对读取字符的理解。
回顾
您学会了读取和写入字符:
getchar()读取一个字符并返回int。putchar(c)写入一个字符。EOF表示输入结束;请使用while ((c = getchar()) != EOF)循环。ungetc可以将字符放回流中。
常见问题解答
「读取字符」课时是免费的吗?
是的 — 「读取字符」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 C Academy 课程的其余内容,请升级到 CoddyKit PRO。 C Academy 课程共包含 4 节课。
「读取字符」这节课中我会学到什么?
getchar 与 putchar 你通过在浏览器中直接运行的动手代码来练习 C Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 C Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 C Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。
「读取字符」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 C Academy 课中编写并运行代码吗?
能。每节 C Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。