鱼C论坛

 找回密码
 立即注册
查看: 1890|回复: 1

关于从文件输入输出程序的问题

[复制链接]
发表于 2020-3-4 08:12:39 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
用fwrite和fread两个函数可以在一个程序中同时存在吗,就是我先创建一个文本文件,
然后用fread读入程序,经过一番计算之后再把计算结果输出返回到文本文件,请简析
一下原因。
下面是我写的一个C的管理系统,目的是使用文件将学生信息导入,计算平均分,用函数
求出每个人的平均成绩,同时又写了一个函数求出某个人的平均成绩,最后将运行结果
送到文件中,其中程序小错误已经全部改掉,但在第一步输入的时候好像就出了点问题
不知道是什么原因,请大佬指正。
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4. #include <string.h>
  5. #define MAX 200
  6. struct student
  7. {
  8.     char no[200];  // 学号
  9.     char name[200]; // 姓名
  10.     float score[4];      // 分数
  11.     float math;
  12.     float eng;
  13.         float phy;
  14.        
  15. };
  16. float ave;
  17. struct data
  18. {
  19.     int count;   // 当前学生数组中学生的个数
  20.     struct student stu[MAX]; // 学生数组
  21. }dd;
  22. // 显示主菜单
  23. void menu()
  24. {
  25.     system("cls");//清屏
  26.     printf("\n\n\n");
  27.     printf("\t\t\t  *******************************\n");
  28.     printf("\t\t\t                              \n");
  29.     printf("\t\t\t     学生成绩管理系统       \n");
  30.     printf("\t\t\t                             \n");
  31.     printf("\t\t\t    [1]   从文件中输入学生数据      \n");
  32.     printf("\t\t\t    [2]   查找个人成绩(学号)         \n");
  33.     printf("\t\t\t    [3]   输出所有成绩记录        \n");
  34.     printf("\t\t\t    [4]   结果存入文件     \n");
  35.     printf("\t\t\t    [0]   退出                 \n");
  36.     printf("\t\t\t                             \n");
  37. }

  38. // 等待用户按回车后回到主菜单
  39. void to_menu()
  40. {
  41.     char c1,c2;
  42.     printf("\n\n\n按回车键返回主菜单...");
  43.     scanf("%c%c",&c1,&c2);//第一个字符吸收上次的确认回车键
  44.     menu();
  45. }

  46. // 将数据从文件读到结构体数组中
  47. void read_data()
  48. {
  49.     FILE *fp;
  50.     int i,k;
  51.      
  52.     k=0;
  53.     if((fp=fopen("C:\\Users\\zdx\\Desktop\\2\\data.txt","rb"))==NULL) // 如果文件不存在
  54.     {
  55.         printf("cannnot open file\n");
  56.                 exit(0);
  57.     }
  58.    for(i=0;i<MAX;i++)
  59.     {
  60.          fread(&dd.stu[i],sizeof(struct student),1,fp);
  61.         
  62.     }fclose(fp);
  63. }

  64. //计算个人平均成绩
  65. void averagy_date()
  66. {  
  67.     int i;
  68.     double total;
  69.     double ave;
  70.         for(i=0;i<dd.count;i++)
  71.     {
  72.                 total=dd.stu[i].math+dd.stu[i].phy+dd.stu[i].eng;
  73.                 ave=total/3;
  74.     }
  75. }
  76. // 查询学生成绩(学号)
  77. void query_data()
  78. {
  79.     int i,k;
  80.     char no[10];
  81.     printf("\n请输入要查询学生的学号:");
  82.     scanf("%s",no);
  83.     k=-1;
  84.     for(i=0;i<dd.count;i++)
  85.     {
  86.         if(strcmp(dd.stu[i].no,no)==0)
  87.         {
  88.             printf("\n\n学号\t姓名\t数学\t英语\t物理\t平均分");
  89.             printf("\n-----------------------------------------------------------------\n");
  90.             k=i;
  91.             printf("%s\t%s\t%-7.1f\t%-7.1f\t%-7.1f\t-7.1f\n",dd.stu[i].no,dd.stu[i].name,dd.stu[i].math,dd.stu[i].eng,dd.stu[i].phy,ave);
  92.             break;  //  学号应该是唯一的,找到了一个就代表以后的没有了。
  93.         }
  94.     }
  95.     if(k==-1)
  96.     {
  97.         printf("\n\n没有找到该学生(学号-%s)!",no);
  98.     }
  99. }

  100. //输出所有成绩记录
  101. void view_data()
  102. {
  103.     int i;
  104.     printf("学号\t姓名\t数学\t英语\t物理\t平均分");
  105.     printf("\n-------------------------------------------------------------------\n");
  106.     for(i=0;i<dd.count;i++)
  107.         printf("%s\t%s\t%-7.1f\t%-7.1f\t%-7.1f\n",dd.stu[i].no,dd.stu[i].name,dd.stu[i].math,dd.stu[i].eng,dd.stu[i].phy,ave);
  108.     printf("\n-------------------------------------------------------------------\n");
  109. }

  110. // 将数据从结构体数组保存到文件中
  111. void save_data()
  112. {
  113.     FILE *fp;//文件指针
  114.     int i;
  115.     fp=fopen("C:\\Users\\zdx\\Desktop\\2\\data.txt","wb");//文件存储位置:当前文件夹
  116.     fwrite(&dd.count,sizeof(int),1,fp);
  117.     for(i=0;i<dd.count;i++)
  118.         fwrite(&dd.stu[i],sizeof(struct student),1,fp);
  119.     fclose(fp);
  120. }

  121. // 主函数
  122. void main()
  123. {
  124.     int fun;
  125.     dd.count = 0;
  126.     read_data();
  127.     menu();
  128.     while(1)
  129.     {
  130.         printf("请输入功能号[0-4]:");
  131.         scanf("%d",&fun);
  132.         switch(fun)
  133.         {
  134.             case 1: read_data();break;        // 从文件中读取学生数据
  135.             case 2: query_data();break;      // 查找个人成绩(学号)
  136.             case 3: view_data();break;    // 输出所有成绩记录
  137.             case 4: query_data();break;   // 结果存入文件
  138.             case 0: break;                   // 退出
  139.         }
  140.         if(fun==0) break;  
  141.         to_menu();
  142.     }

  143.     return;
  144. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-3-4 15:09:43 | 显示全部楼层
凉帖了吗?只回答第一个问题也行,fread和fwrite能不能同时存在于一个程序中啊?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-6 15:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表