C语言文件的操作(适用于考研c程序设计)

一、首先我们来复习一下C语言文件相关的必会知识点:

1. 文件的打开与关闭:C语言使用`fopen()`函数来打开文件,需要指定文件名和打开模式(如读取、写入等)。打开文件成功后,可以使用`fclose()`函数来关闭文件。

2. 文件的读写操作:C语言提供了多种函数用于对文件进行读写操作。常用的函数包括:
   - `fscanf()`和`fprintf()`:用于按格式从文件中读取数据和向文件中写入数据。
   - `fgetc()`和`fputc()`:用于逐个字符地从文件中读取数据和向文件中写入数据。
   - `fgets()`和`fputs()`:用于逐行地从文件中读取数据和向文件中写入数据。

3. 文件位置指示器:每个打开的文件都有一个位置指示器,用于记录当前读写位置。使用`ftell()`函数可以获取当前位置指示器的位置,使用`fseek()`函数可以改变位置指示器的位置。

4. 错误处理:在文件操作中,可能出现一些错误,如文件打开失败、读写错误等。通过检查文件指针返回值或使用`feof()`和`ferror()`函数可以判断是否出现错误,并进行相应的处理。

5. 文件的读写模式:在打开文件时,需要指定文件的读写模式。常用的模式包括:
   - "r":只读模式,文件必须存在。
   - "w":写入模式,如果文件不存在,则创建新文件;如果文件已存在,则清空文件内容。
   - "a":追加模式,如果文件不存在,则创建新文件;如果文件已存在,则在文件末尾追加内容。

6. 二进制文件操作:除了文本文件外,C语言还支持对二进制文件进行读写操作。对于二进制文件的读写,常用的函数包括:
   - `fread()`和`fwrite()`:用于以二进制方式读取和写入数据。

熟练掌握以上C语言文件相关的一些必会知识点,将使你能够灵活处理文件操作的需求。

二、接下来让我们用具体的一个示例程序,演示如何将20位同学的信息写入名为 "student.dat" 的文件,并从文件中读取学号在 minnum~maxnum 之间的学生信息并显示出来。

8d46f8cbbfc04df9880c9975bce1b605.jpg

 

#include <stdio.h>
#include <stdlib.h>

// 学生的信息结构体
typedef struct {
    long num;                  // 学号
    char name[10];             // 姓名
    int age;                   // 年龄
    char sex;                  // 性别
    char speciality[20];       // 专业
    char address[40];          // 住址
} Student;

// 将所有学生信息写入文件student.dat
void WriteToFile(Student students[], int n) {
    // 打开名为 "student.dat" 的文件,以二进制写入的方式
    FILE *file = fopen("student.dat", "wb");
    if (file == NULL) {
        printf("无法打开文件!");
        return;
    }

    // 将学生信息写入文件
    fwrite(students, sizeof(Student), n, file);

    // 关闭文件
    fclose(file);
}

// 从文件student.dat中读取学号在minnum~maxnum之间的学生信息并显示在屏幕上
void ReadFromFile(long minnum, long maxnum) {
    // 打开名为 "student.dat" 的文件,以二进制读取的方式
    FILE *file = fopen("student.dat", "rb");
    if (file == NULL) {
        printf("无法打开文件!");
        return;
    }

    // 读取学生信息,并显示学号在minnum~maxnum之间的学生信息
    Student student;
    while (fread(&student, sizeof(Student), 1, file)) {
        if (student.num >= minnum && student.num <= maxnum) {
            printf("学号:%ld,姓名:%s,年龄:%d,性别:%c,专业:%s,住址:%s\n",
                   student.num, student.name, student.age, student.sex, student.speciality, student.address);
        }
    }

    // 关闭文件
    fclose(file);
}

int main() {
    Student students[20];

    // 从键盘输入学生信息
    for (int i = 0; i < 20; i++) {
        printf("请输入第%d位同学的学号、姓名、年龄、性别、专业和住址(以空格分隔):", i + 1);
        scanf("%ld %s %d %c %s %[^\n]", &(students[i].num), students[i].name, &(students[i].age),
              &(students[i].sex), students[i].speciality, students[i].address);
    }

    // 将所有学生信息写入文件
    WriteToFile(students, 20);

    // 输入要查询的学号范围
    long minnum, maxnum;
    printf("请输入要查询的学号范围:");
    scanf("%ld %ld", &minnum, &maxnum);

    // 从文件中读取学生信息,并显示学号在minnum~maxnum之间的学生信息
    ReadFromFile(minnum, maxnum);

    return 0;
}

请确保在编译和运行上述程序之前,已经正确初始化了 `students` 数组中的学生信息。该程序通过使用结构体 `Student` 存储一个学生的信息,并使用二进制模式的文件 I/O 操作来写入和读取学生信息。

 

 

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值