文件类的问题,存入再读出

存入一个信息再读出(里面包含学号,姓名,成绩等,),把他们输入到一个文件再读出

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

#define N 10 // 学生人数

// 学生信息的结构体
typedef struct student
{
    int id; // 学号
    char name[20]; // 姓名
    float score; // 成绩
} Student;

int main()
{
    // 声明并初始化学生信息数组
    Student students[N] = {
        { 1, "Alice", 85.5 },
        { 2, "Bob", 90.0 },
        { 3, "Charlie", 88.0 },
        { 4, "Dave", 95.0 },
        { 5, "Eve", 91.5 },
        { 6, "Frank", 77.5 },
        { 7, "Gina", 80.0 },
        { 8, "Henry", 82.5 },
        { 9, "Ivy", 75.0 },
        { 10, "Jill", 93.0 }
    };

    // 打开文件 student.rec,如果文件不存在则创建它
    FILE *fp = fopen("student.rec", "w+");
    if (fp == NULL)
    {
        perror("Error opening file");
        return 1;
    }

    // 将学生信息写入文件
    for (int i = 0; i < N; i++)
    {
        fprintf(fp, "%d %s %f\n", students[i].id, students[i].name, students[i].score);
    }

    // 重置文件指针位置,准备从文件中读取数据
    rewind(fp);

    // 从文件中读取学生信息
    for (int i = 0; i < N; i++)
    {
        fscanf(fp, "%d %s %f", &students[i].id, students[i].name, &students[i].score);
    }

    // 关闭文件
    fclose(fp);

    // 在屏幕上显示学生信息
    for (int i = 0; i < N; i++)
    {
        printf("%d %s %.1f\n", students[i].id, students[i].name, students[i].score);
    }

    return 0;
}

解题思路如下:

在 C 语言中,可以使用结构体来存储学生信息。首先,定义一个名为 Student 的结构体,包含学号、姓名和成绩三个字段。

在程序的开头,声明一个名为 students 的学生信息数组,并使用初始化列表初始化数组中的元素。

打开文件 student.rec,如果文件不存在则创建它。

循环遍历学生信息数组,使用函数 fprintf() 将每个学生的信息写入文件。

使用函数 rewind() 重置文件指针的位置,准备从文件中读取数据。

再次循环遍历学生信息数组,使用函数 fscanf() 从文件中读取每个学生的信息。

关闭文件。

循环遍历学生信息数组,使用函数 printf() 在屏幕上显示每个学生的信息。

结束程序。

详细的解决思路和示例代码如下:

  • 使用结构体来存储学生信息。首先,定义一个名为 Student 的结构体,包含学号、姓名和成绩三个字段。
  • 在程序的开头,声明一个名为 students 的学生信息数组,并使用初始化列表初始化数组中的元素。
  • 打开文件 student.rec,如果文件不存在则创建它。
  • 循环遍历学生信息数组,使用函数 fprintf() 将每个学生的信息写入文件。
  • 使用函数 rewind() 重置文件指针的位置,准备从文件中读取数据。
  • 再次循环遍历学生信息数组,使用函数 fscanf() 从文件中读取每个学生的信息。
  • 关闭文件。
  • 循环遍历学生信息数组,使用函数 printf() 在屏幕上显示每个学生的信息。
  • 结束程序。
#include <stdio.h>
#include <stdlib.h>
#define N 10 // 学生人数
// 学生信息的结构体
typedef struct student
{
    int id; // 学号
    char name[20]; // 姓名
    float score; // 成绩
} Student;
int main()
{
    // 声明并初始化学生信息数组
    Student students[N] = {
        { 1, "Alice", 85.5 },
        { 2, "Bob", 90.0 },
        { 3, "Charlie", 88.0 },
        { 4, "Dave", 95.0 },
        { 5, "Eve", 91.5 },
        { 6, "Frank", 77.5 },
        { 7, "Gina", 80.0 },
        { 8, "Henry", 82.5 },
        { 9, "Ivy", 75.0 },
        { 10, "Jill", 93.0 }
    };
    // 打开文件 student.rec,如果文件不存在则创建它
    FILE *fp = fopen("student.rec", "w+");
    if (fp == NULL)
    {
        perror("Error opening file");
        return 1;
    }
    // 将学生信息写入文件
    for (int i = 0; i < N; i++)
    {
        fprintf(fp, "%d %s %f\n", students[i].id, students[i].name, students[i].score);
    }
    // 重置文件指针位置,准备从文件中读取数据
    rewind(fp);
    // 从文件中读取学生信息
    for (int i = 0; i < N; i++)
    {
        fscanf(fp, "%d %s %f", &students[i].id, students[i].name, &students[i].score);
    }
    // 关闭文件
    fclose(fp);
    // 在屏幕上显示学生信息
    for (int i = 0; i < N; i++)
    {
        printf("%d %s %.1f\n", students[i].id, students[i].name, students[i].score);
    }
    return 0;
}