博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C语言向文件写入学生信息并读取显示出来
阅读量:3966 次
发布时间:2019-05-24

本文共 2207 字,大约阅读时间需要 7 分钟。

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 
#include
#include
#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");}

结果展示:

在这里插入图片描述

在这里插入图片描述

转载地址:http://qicki.baihongyu.com/

你可能感兴趣的文章
Spring 自定义对象初始化及销毁
查看>>
Spring Batch 环境设置
查看>>
字符组转译序列
查看>>
字符转译序列
查看>>
Java 数据类型
查看>>
UTF-16 编码简介
查看>>
Java 变量名
查看>>
Java 四舍五入运算
查看>>
Spring Batch 例子: 运行系统命令
查看>>
Spring Batch 核心概念
查看>>
Spring Batch 例子: 导入定长文件到数据库
查看>>
正则表达式
查看>>
Java I/O
查看>>
序列化
查看>>
Perl 精萃
查看>>
Perl 简介
查看>>
Perl 注释
查看>>
数据类型之标量
查看>>
调试 Perl 脚本
查看>>
增强的for循环语句
查看>>