C语言向文件写入学生信息并读取显示出来

代码功能:

1.从控制台输入学生信息(姓名、年龄、学号和平均分),可以输入任意数目的信息数据。
2.将输入的学生信息数据写入文件中进行保存,文件每行存储一条学生信息,姓名、年龄、学号、平均分以tab(\t)为分隔。
3.学生信息保存成功都并读取出来进行查看。

代码中包含的函数介绍:

1.fopen()函数原型:
FILE *fopen(const char filename, const char mode);
函数功能:
使用给定的模式mode打开filename所指向的文件。
2.字符串 "wt+"作用
以读/写方式打开或新建一个文本文件,允许读和写。
3.perror()函数功能:
用来将上一个函数发生错误的原因输出到标准设备
4.fprintf()函数原型:
int fprintf (FILE
stream, const char
format, [argument])
功能:
fprintf()函数根据指定的格式(format),向输出流(stream)写入数据(argument)
注意:fprintf() 函数并不在结尾自动添加换行符(\n)

5.fscanf()函数原型:
int fscanf(FILE *stream, char *format[,argument…]);
功能:
根据指定的格式(format),从一个文件流(stream)中读取数据(argument),fscanf遇到空格和换行时结束,注意空格时也结束
6.fflush()函数功能:
刷新缓冲区,将缓冲区中的内容写入文件。
7.rewind()函数功能:
是将文件内部的指针重新指向一个流的开头
8.fclose()函数功能:
关闭一个流。注意:使用fclose()函数就可以把缓冲区内最后剩余的数据输出到内核缓冲区,并释放文件指针和有关的缓冲区。

代码流程:

一、以读写的模式打开文件,如果文件存在则清空里面的数据,如果文件不存在则新建文件。
二、从控制台输入学生信息并写入文件中,通过while循环不断读取学生信息,没有限制具体数目,按 Ctrl+Z 组合键结束输入。Ctrl+Z表示文件输入结束,即EOF。
注意:fprintf() 函数并不在结尾自动添加换行符(\n),显示增加换行符的目的是:
用记事本打开文件后可以清晰的看到学生信息,一个学生占据一行;否则所有学生信息都在一行,阅读困难。
后续读取文件时,fscanf() 以换行符为读取结束标志,没有换行符将不能正确读取数据。
两点说明:
1.输入结束时并没有将输入的学生信息保存到文件中,而是停留在缓冲区,导致后边读取文件时没有内容。所以必须通过 fflush() 函数刷新缓冲区,将缓冲区中的内容写入文件。
2.将缓冲区的内容写入文件后,文件内部位置指针实际指向了文件结尾,必须重置位置指针,否则后续读取会出错。rewind() 函数将位置指针重置到文件开头。
三、最后用 fscanf()函数 从文件中将学生信息一行一行的读取出来

代码实现:

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

#define FILE_PATH "D:/VScode-progect/demo.txt"   //文件路径

int main()
{
    char name[30];     //姓名
    int age;           //年龄
    int studNo;        //学号
    float score;         //平均分
    FILE *fp;          //文件指针

    //判断文件是否能够正确创建/打开   
    if ((fp = fopen(FILE_PATH,"wt+")) == NULL)
    {
        perror(FILE_PATH);
        exit(1);
    }
    //从控制台输入学生信息并写入文件
    printf("请输入姓名、年龄、学号和平均分(以空格分隔):\n");
    while (scanf("%s %d %d %f",name,&age,&studNo,&score) != EOF)
    {
        fprintf(fp,"%s\t%d\t%d\t%0.2f\n",name, age, studNo, score);
    }
    //刷新缓冲区,将缓冲区的内容写入文件
    fflush(fp);
    //重置文件内部位置指针,让位置指针指向文件开头
    rewind(fp);

    //从文件中读取学生信息
    printf("\n读取文件内容:\n");
    while (fscanf(fp, "%s\t%d\t%d\t%f", name, &age, &studNo, &score) != EOF)
    {
        printf("%s  %d  %d  %0.2f\n", name, age, studNo, score);
    }
    fclose(fp);


    system("pause");
}


结果展示:

在这里插入图片描述
在这里插入图片描述

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐