在C语言中,文件字符读写通过fgetc()(从文件读取单个字符,返回EOF表示结束)和fputc()(向文件写入单个字符)实现,操作流程包括用fopen()以"r"(读)或"w"(写)模式打开文件、进行字符读写操作、最后用fclose()关闭文件,同时需检查文件打开是否成功以避免错误。

在C语言中,文件的字符读写是基本的文件操作方式,通过fgetc()fputc()函数实现。

基本概念

  • "读":输入数据,将数据从磁盘(文件)中输入到内存中存储
  • "写":输出数据,将数据从内存中输出到磁盘(文件)中存储

重要提示:在进行文件操作前,必须先确定操作类型(读/写),再选择相应的打开方式("r"表示读,"w"表示写)。

1. 字符读取:fgetc()函数

函数原型

int fgetc(FILE *stream);

功能

从指定的文件中读取一个字符

用法示例

#include <stdio.h>

int main() {
    FILE *fp;
    int ch;
    
    // 打开文件进行读取
    fp = fopen("example.txt", "r");
    if (fp == NULL) {
        perror("无法打开文件");
        return 1;
    }
    
    // 逐个读取字符直到文件末尾
    while ((ch = fgetc(fp)) != EOF) {
        putchar(ch);  // 将字符输出到屏幕
    }
    
    fclose(fp);
    return 0;
}

说明

  • fgetc()返回读取的字符的ASCII码值,若到达文件末尾或发生错误,返回EOF(通常为-1)
  • EOF是定义在<stdio.h>中的常量

2. 字符写入:fputc()函数

函数原型

int fputc(int character, FILE *stream);

功能

将一个字符写入指定的文件中

用法示例

#include <stdio.h>

int main() {
    FILE *fp;
    
    // 打开文件进行写入("w"模式会清空原有内容)
    fp = fopen("example.txt", "w");
    if (fp == NULL) {
        perror("无法打开文件");
        return 1;
    }
    
    // 写入字符'a'到'z'
    for (char c = 'a'; c <= 'z'; c++) {
        fputc(c, fp);
    }
    
    // 写入换行符
    fputc('\n', fp);
    
    // 写入字符串"Hello, World!"
    fputc('H', fp);
    fputc('e', fp);
    fputc('l', fp);
    fputc('l', fp);
    fputc('o', fp);
    fputc(',', fp);
    fputc(' ', fp);
    fputc('W', fp);
    fputc('o', fp);
    fputc('r', fp);
    fputc('l', fp);
    fputc('d', fp);
    fputc('!', fp);
    
    fclose(fp);
    return 0;
}

说明

  • fputc()返回写入的字符ASCII码,若写入失败,返回EOF
  • 可以通过循环或条件语句逐个写入字符

3. 完整文件操作流程

// 1. 打开文件
FILE *fp = fopen("filename", "mode");

// 2. 检查是否成功打开
if (fp == NULL) {
    perror("错误信息");
    return 1;
}

// 3. 文件操作
// 读操作
while ((ch = fgetc(fp)) != EOF) {
    // 处理字符
}

// 写操作
fputc('a', fp);
// ...其他写入操作

// 4. 关闭文件
fclose(fp);

4. 注意事项

  1. 打开方式选择

    • "r":只读打开文本文件
    • "w":只写打开或建立新文件(原有内容会被清空)
    • "a":追加打开文本文件(在文件末尾添加内容)
  2. 错误处理:始终检查文件是否成功打开

  3. 资源管理:操作完成后必须关闭文件,避免资源泄漏

  4. 文件指针:关闭后应将文件指针置为NULL,避免野指针

  5. 字符编码:C语言中文件是字节流,fgetc和fputc处理的是单个字节

5. 实用技巧

  • 逐字符读写:适合处理小文件或需要精细控制的场景
  • 从键盘读取fgetc(stdin) 从标准输入(键盘)读取
  • 输出到屏幕fputc('a', stdout) 将字符输出到屏幕

6. 代码示例:完整文件字符读写

#include <stdio.h>

int main() {
    FILE *fp;
    int ch;
    
    // 写入操作
    fp = fopen("test.txt", "w");
    if (fp == NULL) {
        perror("无法打开文件进行写入");
        return 1;
    }
    
    // 写入26个字母
    for (char c = 'a'; c <= 'z'; c++) {
        fputc(c, fp);
    }
    
    fputc('\n', fp); // 写入换行符
    fputc('H', fp);
    fputc('e', fp);
    fputc('l', fp);
    fputc('l', fp);
    fputc('o', fp);
    
    fclose(fp);
    
    // 读取操作
    fp = fopen("test.txt", "r");
    if (fp == NULL) {
        perror("无法打开文件进行读取");
        return 1;
    }
    
    // 逐个读取并打印
    while ((ch = fgetc(fp)) != EOF) {
        putchar(ch);
    }
    
    fclose(fp);
    
    return 0;
}

通过上述方法,您可以实现C语言中基本的文件字符读写操作。这些函数是C语言文件操作的基础,理解它们对进行更复杂的文件操作至关重要。