ZetCode

C putchar 函数

最后修改日期:2025 年 4 月 6 日

字符输出是 C 编程中的一项基本操作,可让您高效地显示文本。putchar 函数是向标准输出写入单个字符的简单而强大的工具。本教程将深入探讨 putchar,涵盖其语法、用法和实际应用。掌握字符输出有助于构建交互式程序并加深您对 C 的 I/O 系统的理解。

什么是 putchar?

putchar 函数将单个字符写入标准输出(stdout)。它接受一个整数参数,该参数表示要写入的字符,并返回与 int 强制转换的 unsigned char 相同的字符。失败时,它返回 EOF。此函数在 stdio.h 头文件中声明。putchar 等同于 putc,其第二个参数为 stdout。它通常在循环中用于逐个字符输出。

基本的 putchar 示例

让我们从一个演示 putchar 基本用法的简单示例开始。

basic_putchar.c
#include <stdio.h>

int main() {
    putchar('A');  // Outputs 'A'
    putchar('\n'); // Outputs newline
    putchar(66);   // Outputs 'B' (ASCII 66)
    putchar('\n');
    
    return 0;
}

此程序演示了 putchar 的最简单用法。第一次调用输出字符 'A',然后是换行符。第三次调用表明 putchar 可以接受代表 ASCII 码的整数值。在这里,66 是 'B' 的 ASCII 码。每个字符会立即输出到 stdout。

使用 putchar 打印字符串

虽然 putchar 输出单个字符,但我们可以使用它来打印整个字符串。

string_putchar.c
#include <stdio.h>

int main() {
    char *str = "Hello, World!";
    
    while (*str != '\0') {
        putchar(*str);
        str++;
    }
    putchar('\n');
    
    return 0;
}

此示例展示了如何使用 putchar 逐个字符地打印字符串。我们初始化一个指向该字符串的指针,并循环直到到达空终止符。每个字符都会传递给 putchar 进行输出。这说明了像 puts 这样的更高级函数可能是在内部使用 putchar 实现的。

在循环中使用 putchar

putchar 与循环结合用于重复输出特别有用。

loop_putchar.c
#include <stdio.h>

int main() {
    for (int i = 0; i < 10; i++) {
        putchar('*');
    }
    putchar('\n');
    
    return 0;
}

此程序使用 for 循环在一行中打印 10 个星号,然后是换行符。putchar 的简洁性使其非常适合此类重复输出任务。该示例演示了如何使用 putchar 在控制台输出中创建简单的图案或视觉元素。

读取输入并使用 putchar

我们可以将 getcharputchar 结合使用进行基本的 I/O。

echo_putchar.c
#include <stdio.h>

int main() {
    int c;
    
    printf("Type some text (Ctrl+D to end):\n");
    while ((c = getchar()) != EOF) {
        putchar(c);
    }
    
    return 0;
}

此程序创建了一个简单的回显实用程序,它使用 putchar 从 stdin 读取字符并将其写入 stdout。循环一直持续到 getchar 返回 EOF(通常由 Ctrl+D 或 Ctrl+Z 触发)。这演示了如何在交互式程序中使用 putchar 进行实时字符处理。

使用 putchar 进行大小写转换

putchar 可以与字符处理函数结合使用进行文本处理。

case_convert.c
#include <stdio.h>
#include <ctype.h>

int main() {
    char *str = "Hello World 123";
    
    while (*str != '\0') {
        if (isalpha(*str)) {
            putchar(toupper(*str));
        } else {
            putchar(*str);
        }
        str++;
    }
    putchar('\n');
    
    return 0;
}

此程序将字符串中的所有字母字符转换为大写,同时保持其他字符不变。它演示了如何将 putcharctype.h 中的字符分类和转换函数结合使用。条件确保在输出之前仅修改字母。

创建进度指示器

putchar 可用于创建简单的控制台动画和进度指示器。

progress_putchar.c
#include <stdio.h>
#include <unistd.h>

int main() {
    printf("Processing: ");
    for (int i = 0; i < 20; i++) {
        putchar('.');
        fflush(stdout);  // Ensure immediate output
        usleep(100000);  // 100ms delay
    }
    putchar('\n');
    printf("Done!\n");
    
    return 0;
}

此示例通过在它们之间添加延迟来打印点,从而创建了一个简单的进度指示器。fflush(stdout) 调用可确保每个点立即显示,而不是被缓冲。这演示了如何在命令行程序中使用 putchar 进行简单的控制台动画和状态指示器。

使用 putchar 打印 ASCII 表

我们可以使用 putchar 显示可打印的 ASCII 字符集。

ascii_table.c
#include <stdio.h>

int main() {
    printf("Printable ASCII characters:\n");
    for (int i = 32; i < 127; i++) {
        putchar(i);
        putchar(' ');
        if ((i - 31) % 16 == 0) putchar('\n');
    }
    putchar('\n');
    
    return 0;
}

此程序以格式化的网格打印所有可打印的 ASCII 字符(代码 32-126)。模运算每 16 个字符创建一个新行以提高可读性。此示例展示了如何将 putchar 与算术运算结合使用来创建结构化输出。

使用 putchar 的最佳实践

来源

C putchar 文档

本教程通过实际示例演示了 C 语言中 putchar 函数的通用性。从基本的字符输出到交互式程序和文本处理,putchar 是 C 编程中控制台 I/O 的基本构建块。

作者

我叫 Jan Bodnar,是一名敬业的程序员,对编码充满热情。自 2007 年以来,我通过 1,400 多篇文章和 8 本电子书分享我的专业知识。凭借十多年的教学经验,我努力使编程易于理解和引人入胜。

列表 C 标准库