0Pricing
C Academy · 课时

读取字符

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 反馈 — 无需本地设置。

此课程中的所有课时

  1. 将字符视为整数
  2. ctype 库
  3. 读取字符
  4. 构建字符工具
← 返回 C Academy