读取显示

将学生信息(姓名、年龄、学号和平均分)写入文件,然后读取显示出来。

要求:
  • 从控制台输入学生信息;
  • 可以输入任意数目的学生信息;
  • 文件每行存储一条学生信息,姓名、年龄、学号、平均分以tab(\t)为分隔。

代码实现:
   
   
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <errno.h>
  4. #define FILE_PATH "D:/demo.txt" // 文件路径
  5. int main(){
  6. char name[20]; // 姓名
  7. int age; // 年龄
  8. int studNo; // 学号
  9. float score; // 平均分
  10. FILE *fp; // 文件指针
  11. // 判断文件是否能够正确创建/打开
  12. if( (fp=fopen(FILE_PATH,"wt+")) == NULL ){
  13. perror(FILE_PATH);
  14. exit(1);
  15. }
  16. // 从控制台输入学生信息并写入文件
  17. printf("请输入姓名、年龄、学号和平均分(以空格分隔):\n");
  18. while(scanf("%s %d %d %f", name, &age, &studNo, &score)!= EOF){
  19. fprintf(fp,"%s\t%d\t%d\t%f\n", name, age, studNo, score);
  20. }
  21. // 刷新缓冲区,将缓冲区的内容写入文件
  22. fflush(fp);
  23. // 重置文件内部位置指针,让位置指针指向文件开头
  24. rewind(fp);
  25. // 从文件中读取学生信息
  26. printf("\n读取文件内容:\n");
  27. while(fscanf(fp, "%s\t%d\t%d\t%f", name, &age, &studNo, &score) != EOF){
  28. printf("%s %d %d %f\n", name, age, studNo, score);
  29. }
  30. fclose(fp);
  31. return EXIT_SUCCESS;
  32. }
运行结果:
请输入姓名、年龄、学号和平均分(以空格分隔):
棍哥 25 1 99.99
码农宿舍 2 3 89.9
www.coderbbs.com 3 2 100
^Z  // ^Z 为 Ctrl+Z 组合键,表示输入结束

读取文件内容:
棍哥  25  1  99.989998
码农宿舍  2  3  89.900002
www.coderbbs.com  3  2  100.000000

用记事本打开 D:/demo.txt,可以看到刚才输入的内容。

程序主要分为三个步骤。

1) 以读写方式打开文件

wt+ 表示以读写方式打开文本文件,如果文件不存在,则创建,如果存在,清空内容。

perror() 函数在程序退出前,输出具体的错误信息。

2) 从控制台获取学生信息,并写入文件

通过while循环不断读取学生信息,没有限制具体数目,按 Ctrl+Z 组合键结束输入。Ctrl+Z表示文件输入结束,即EOF。

注意:fprintf() 函数并不在结尾自动添加换行符(\n),显示增加换行符的目的是:
  • 用记事本打开文件后可以清晰的看到学生信息,一个学生占据一行;否则所有学生信息都在一行,阅读困难。
  • 后续读取文件时,fscanf() 以换行符为读取结束标志,没有换行符将不能正确读取数据,这一点与 scanf() 类似。

两点说明:
  • 输入结束时并没有将输入内容保存到文件,而是停留在缓冲区,导致后边读取文件时没有内容。所以必须通过 fflush() 函数刷新缓冲区,将缓冲区中的内容写入文件。
  • 将缓冲区的内容写入文件后,文件内部位置指针实际指向了文件结尾,必须重置位置指针,否则后续读取会出错。rewind() 函数将位置指针重置到文件开头。

3) 再从文件中读取学生信息

fscanf() 每次读取一行信息。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值