跳转到内容

C 语言流水输入输出

来自代码酷


C语言流水输入输出是标准库中基于缓冲区的顺序读写机制,通过标准I/O函数(如printf/scanf)实现数据的高效流动。本文将系统讲解其原理、函数使用及实际应用。

核心概念[编辑 | 编辑源代码]

流水输入输出(Stream I/O)是C语言中处理数据的抽象模型,将输入/输出设备(如键盘、屏幕、文件)视为连续的数据流(Stream)。其特点包括:

  • 缓冲机制:减少直接访问硬件次数,提升效率
  • 顺序访问:数据按写入/读取顺序处理
  • 设备无关性:统一接口处理不同设备

流类型[编辑 | 编辑源代码]

标准流类型
文件指针 默认设备
标准输入 stdin 键盘
标准输出 stdout 屏幕
标准错误 stderr 屏幕

基础函数[编辑 | 编辑源代码]

格式化输出(printf)[编辑 | 编辑源代码]

#include <stdio.h>
int main() {
    int count = printf("PI: %.2f\n", 3.14159);  // 格式化输出
    printf("Printed %d characters\n", count);   // 返回输出字符数
    return 0;
}

输出:

PI: 3.14
Printed 8 characters

格式化输入(scanf)[编辑 | 编辑源代码]

#include <stdio.h>
int main() {
    int age;
    printf("Enter your age: ");
    scanf("%d", &age);  // 注意取地址符&
    printf("You are %d years old\n", age);
    return 0;
}

交互示例:

Enter your age: 25
You are 25 years old

缓冲机制详解[编辑 | 编辑源代码]

数据
满/刷新
输入数据
可用数据
程序
缓冲区
设备

缓冲类型:

  • 全缓冲:文件操作常用,缓冲区满时刷新
  • 行缓冲:终端I/O常用,遇到换行符刷新
  • 无缓冲stderr默认使用

手动刷新缓冲区:

fflush(stdout);  // 立即输出缓冲区内容

高级应用[编辑 | 编辑源代码]

文件流操作[编辑 | 编辑源代码]

#include <stdio.h>
int main() {
    FILE *fp = fopen("data.txt", "w+");
    if(fp) {
        fprintf(fp, "Write to file\n");  // 文件格式化输出
        rewind(fp);  // 重置文件指针
        
        char buffer[100];
        fscanf(fp, "%s", buffer);       // 文件格式化输入
        printf("Read: %s\n", buffer);
        fclose(fp);
    }
    return 0;
}

错误处理模式[编辑 | 编辑源代码]

#include <stdio.h>
#include <errno.h>
int main() {
    FILE *fp = fopen("nonexistent.txt", "r");
    if(fp == NULL) {
        perror("Error opening file");  // 自动附加错误描述
        printf("Error code: %d\n", errno);
    }
    return 0;
}

典型输出:

Error opening file: No such file or directory
Error code: 2

数学公式示例[编辑 | 编辑源代码]

当处理科学计算输出时,可能需要格式化数学公式: 解析失败 (语法错误): {\displaystyle printf("Euler's formula: e^{iπ} + 1 = %d\n", 0); }

性能优化建议[编辑 | 编辑源代码]

  • 减少频繁小数据量I/O操作
  • 对于大量数据,考虑使用块读写(fread/fwrite
  • 错误检查应包含所有I/O操作返回值

常见问题[编辑 | 编辑源代码]

页面模块:Message box/ambox.css没有内容。

char name[20];
scanf("%19s", name);  // 保留1字节给终止符

模板:Note

总结[编辑 | 编辑源代码]

流水I/O是C程序与外界交互的核心机制,理解其缓冲特性和正确使用错误处理方法是成为成熟C程序员的关键。通过本文的示例和解释,读者应能掌握:

  • 标准I/O函数的使用场景
  • 缓冲区的运作原理
  • 健壮I/O程序的编写方法