|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
用fwrite和fread两个函数可以在一个程序中同时存在吗,就是我先创建一个文本文件,
然后用fread读入程序,经过一番计算之后再把计算结果输出返回到文本文件,请简析
一下原因。
下面是我写的一个C的管理系统,目的是使用文件将学生信息导入,计算平均分,用函数
求出每个人的平均成绩,同时又写了一个函数求出某个人的平均成绩,最后将运行结果
送到文件中,其中程序小错误已经全部改掉,但在第一步输入的时候好像就出了点问题
不知道是什么原因,请大佬指正。- #include <stdio.h>
- #include <stdlib.h>
- #include <math.h>
- #include <string.h>
- #define MAX 200
- struct student
- {
- char no[200]; // 学号
- char name[200]; // 姓名
- float score[4]; // 分数
- float math;
- float eng;
- float phy;
-
- };
- float ave;
- struct data
- {
- int count; // 当前学生数组中学生的个数
- struct student stu[MAX]; // 学生数组
- }dd;
- // 显示主菜单
- void menu()
- {
- system("cls");//清屏
- printf("\n\n\n");
- printf("\t\t\t *******************************\n");
- printf("\t\t\t \n");
- printf("\t\t\t 学生成绩管理系统 \n");
- printf("\t\t\t \n");
- printf("\t\t\t [1] 从文件中输入学生数据 \n");
- printf("\t\t\t [2] 查找个人成绩(学号) \n");
- printf("\t\t\t [3] 输出所有成绩记录 \n");
- printf("\t\t\t [4] 结果存入文件 \n");
- printf("\t\t\t [0] 退出 \n");
- printf("\t\t\t \n");
- }
-
- // 等待用户按回车后回到主菜单
- void to_menu()
- {
- char c1,c2;
- printf("\n\n\n按回车键返回主菜单...");
- scanf("%c%c",&c1,&c2);//第一个字符吸收上次的确认回车键
- menu();
- }
- // 将数据从文件读到结构体数组中
- void read_data()
- {
- FILE *fp;
- int i,k;
-
- k=0;
- if((fp=fopen("C:\\Users\\zdx\\Desktop\\2\\data.txt","rb"))==NULL) // 如果文件不存在
- {
- printf("cannnot open file\n");
- exit(0);
- }
- for(i=0;i<MAX;i++)
- {
- fread(&dd.stu[i],sizeof(struct student),1,fp);
-
- }fclose(fp);
- }
- //计算个人平均成绩
- void averagy_date()
- {
- int i;
- double total;
- double ave;
- for(i=0;i<dd.count;i++)
- {
- total=dd.stu[i].math+dd.stu[i].phy+dd.stu[i].eng;
- ave=total/3;
- }
- }
- // 查询学生成绩(学号)
- void query_data()
- {
- int i,k;
- char no[10];
- printf("\n请输入要查询学生的学号:");
- scanf("%s",no);
- k=-1;
- for(i=0;i<dd.count;i++)
- {
- if(strcmp(dd.stu[i].no,no)==0)
- {
- printf("\n\n学号\t姓名\t数学\t英语\t物理\t平均分");
- printf("\n-----------------------------------------------------------------\n");
- k=i;
- 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);
- break; // 学号应该是唯一的,找到了一个就代表以后的没有了。
- }
- }
- if(k==-1)
- {
- printf("\n\n没有找到该学生(学号-%s)!",no);
- }
- }
- //输出所有成绩记录
- void view_data()
- {
- int i;
- printf("学号\t姓名\t数学\t英语\t物理\t平均分");
- printf("\n-------------------------------------------------------------------\n");
- for(i=0;i<dd.count;i++)
- 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);
- printf("\n-------------------------------------------------------------------\n");
- }
- // 将数据从结构体数组保存到文件中
- void save_data()
- {
- FILE *fp;//文件指针
- int i;
- fp=fopen("C:\\Users\\zdx\\Desktop\\2\\data.txt","wb");//文件存储位置:当前文件夹
- fwrite(&dd.count,sizeof(int),1,fp);
- for(i=0;i<dd.count;i++)
- fwrite(&dd.stu[i],sizeof(struct student),1,fp);
- fclose(fp);
- }
- // 主函数
- void main()
- {
- int fun;
- dd.count = 0;
- read_data();
- menu();
- while(1)
- {
- printf("请输入功能号[0-4]:");
- scanf("%d",&fun);
- switch(fun)
- {
- case 1: read_data();break; // 从文件中读取学生数据
- case 2: query_data();break; // 查找个人成绩(学号)
- case 3: view_data();break; // 输出所有成绩记录
- case 4: query_data();break; // 结果存入文件
- case 0: break; // 退出
- }
- if(fun==0) break;
- to_menu();
- }
-
- return;
- }
复制代码 |
|